<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                * 這里先說個理解: php的多進程任務:多個php子進程去處理任務 我們先了解一下,php進程在linux的表現形式 ~~~ #查看php進程 ps -ef | grep php ~~~ * 1 * 2 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200925165347653.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM2NzcwNA==,size_16,color_FFFFFF,t_70#pic_center) 上圖所示 有一個php-fpm:master 這個是主進程,其他php-fpm:pool 是子進程。當一個請求進來,我們的主進程會分配一個子進程去處理相關任務。 那我們怎么去增加一個進程和對進程進行一個任務分配達到多進程處理的效果呢? 1.首先是增加一個進程,我們寫段php來試下 ~~~ vim test.php ~~~ * 1 ~~~ <?php sleep(10);#延遲10秒執行 ~~~ * 1 * 2 ~~~ #執行這個php php test.php ~~~ * 1 * 2 這個時候,你會發現什么linux處于一個等待的情況,這個時候我們打開另外一個窗口查看php進程,這個時候就會發現進程中多出了一個進程,而且就是我們剛才執行的php test.php ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200925171814543.png#pic_center) 但是這個時候又會出現另一個問題,當linux結束了10秒的等待時間,php進程也跟著消失了。這個時候就需要我們讓這個腳本一直執行,那么進程就會一直存在了! 2.不會停止的php運行 ~~~ <?php #修改剛才的腳本,寫一個死循環 while(1){ } ~~~ 再執行 ~~~ php test.php ~~~ * 1 這個時候php的進程就不會退出了。但是另外一個問題也來了,我們ctrl+c退出這個運行,或者是關閉這個連接窗口,我們的php進程也會隨之退出。 3.守護態的php進程運行 重新執行命令 加上 >> /dev/null 就可以保持一個后臺運行 的php進程了 ··· php test.php >> /dev/null ··· 這個時候我們已經了解怎么樣啟動一個在后臺運行的php任務了,那我們就繼續深入。 ###### (暈,感覺寫的好啰嗦,直接放代碼了!!小聲BB) 終極蛇皮多進程php管理 command.php ~~~php <?php function runPHPFPM($filename,$num){ $res = exec("/bin/ps -ef|grep -v grep|grep '{$filename}'|wc -l");//獲得這個執行任務名的進程次數 //開始增加進程 if($res<$num){ $off = $num - $res; for($i=0;$i<$off;$i++){ //補全N個進程 $log_into['add_num'] = $i+1; // 再次開啟數 $exec_str = '/usr/bin/php '." $filename >> /dev/null & "; exec($exec_str);//exec() linux執行php命令 } } } runPHPFPM('test.php',1);//默認啟動一個 ~~~ test.php ~~~php <?php while (1){ $nowTime = date('i', time()); if ($nowTime == 59) { exit;//為了保證進程的活躍性,每小時59分給退出一下。不設置的話,有可能導致進程長時間執行,出行異常的問題。比如:明明有數據卻沒有沒執行(我碰見過) } //下面放邏輯,比如redis隊列如下 $redis_key = 'redis任務隊列名字'; $data = json_decode(redis()->lpop($redis_key),true);//從隊列取出一條數據 //入庫 //~~~~ //~~~ //等等 } ?> ~~~ 設置定時任務· crontab -e ~~~ #因為設置的腳本會自動退出,那我們用linux定時任務 一分鐘給執行一次 */1 * * * * /usr/bin/php command.php ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看