隨着互聯網的發展,php快速開發的特點,現在越來越多的團隊將php作爲服務端的編程語言,
nohup
nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。
在缺省情況下該作業的所有輸出都被重定向到一個名爲nohup.out的文件中。
- nohup command > myout.file 2>&1 &
在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是將標準錯誤(2)重定向到標準輸出(&1),標準輸出(&1)再被重定向輸入到myout.file文件中。
nohup和&的區別
& : 指在後臺運行
nohup : nohup運行命令可以使命令永久的執行下去,和用戶終端沒有關係,例如我們斷開SSH連接都不會影響他的運行,注意了nohup沒有後臺運行的意思;&纔是後臺運行
&是指在後臺運行,但當用戶推出(掛起)的時候,命令自動也跟着退出
結合起來用就是
nohup COMMAND &
這樣就能使命令永久的在後臺執行
例如:
執行命令
nohup yii test-server/start > tets.txt 2>&1 &
查看進程 jobs命令只看當前終端生效的,關閉終端後,在另一個終端jobs已經無法看到後臺跑得程序了,此時利用ps(進程查看命令)
jobs -l
斷開終端,查看進程
ps -ef | grep php
501 5410 1 0 4:08下午 ?? 0:00.05 php /usr/bin/yii test-server/start
501 5888 1 0 4:10下午 ?? 13:27.09 /Applications/PhpStorm.app/Contents/MacOS/phpstorm
501 8723 1 0 4:25下午 ?? 0:00.00 php /usr/bin/yii test-server/start
501 8727 7248 0 4:25下午 ttys002 0:00.00 grep php
這就實現了守護進程.
注意
單獨執行 php myprog.php,當按下ctrl+c時就會中斷程序執行,會kill當前進程以及子進程。
php myprog.php &,這樣執行程序雖然也是轉爲後臺運行,實際上是依賴終端的,當用戶退出終端時進程就會被殺掉。