最近在開發dueros的技能,官方提供的PHPSDK中有多個實力,而運行實例的命令如下是 nohup php -S 0.0.0.0:8029 myindex.php & 從命令來看,肯定是在8029啟動了一個服務,因為之前從來沒有用過這個Linux命令,所以對這個命令很好奇。比如,這個命令的標準格式 ...
最近在開發dueros的技能,官方提供的PHPSDK中有多個實力,而運行實例的命令如下是
nohup php -S 0.0.0.0:8029 myindex.php &
從命令來看,肯定是在8029啟動了一個服務,因為之前從來沒有用過這個Linux命令,所以對這個命令很好奇。比如,這個命令的標準格式是什麼,參數是什麼,如何查看這個進程以及如何結束這個進程。後面還有一個&,不知道又是什麼功效?
語法:nohup Command [ Arg … ] [ & ]
用途:不掛斷地運行命令。
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。
如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。
如果沒有文件能創建或打開以用於追加,那麼 Command 參數指定的命令不可調用。
退出狀態:該命令返回下列出口值:
126 可以查找但不能調用 Command 參數指定的命令。
127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。
否則,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。
從網路資料可知,nohup命令格式,用法說如如上。 最後的&代表用途是讓進程在“後臺運行”。 一般情況下nohup和&都是組合使用。
下麵就舉個例子。
1. 用nohup和&創建進程
nohup php -S 0.0.0.0:8029 myindex.php & [1] 5701 [root@AY140716152350Z ~]# nohup: ignoring input and appending output to `nohup.out'
執行命令後會返回進程ID:5701,在當前目錄創建一個nohup.out文件。
2. 查看這個進程。
[root@AY140716152350Z ~]# jobs -l [1]+ 5701 Running nohup php -S 0.0.0.0:8029 myindex.php &
Jobs -l jobs命令只看當前終端生效的,關閉終端後,其他終端就無效了
[root@AY140716152350Z ~]# ps -aux|grep index.php Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 5701 0.0 0.5 195876 10284 pts/0 S 11:34 0:00 php -S 0.0.0.0:8029 myindex.php root 5982 0.0 0.0 103188 880 pts/0 S+ 11:39 0:00 grep index.php [root@AY140716152350Z ~]# ps -aux|grep index.php|grep -v grep Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 5701 0.0 0.5 195876 10284 pts/0 S 11:34 0:00 php -S 0.0.0.0:8029 myindex.php
如果你斷開終端之後,再次登錄,可以使用 ps -aux命
a:顯示所有程式
u:以用戶為主的格式來顯示
x:顯示所有程式,不以終端機來區分
通過添加 |grep -v grep 可以排除自身進程。
3. 結束進程
[root@AY140716152350Z ~]# kill -9 5701
如果需要結束進程,只需用kill命令,參數就是進程號。這個創建的時候可以知道。通過,第二部的命令也可以獲取。
-9 是kill命令的一個參數,可以理解為“強殺”,比起不帶參數殺傷力更強。
4.擴展內容
使用awk命令獲得進程ID
[root@AY140716152350Z ~]# ps -aux|grep index.php|grep -v grep| awk '{print $2}' 5701
print $2 代表取第二個列。從上面ps的結果中可以看到,第二列就是進程ID。
使用 lsof 查看埠使用情況
[root@AY140716152350Z ~]# lsof -i:8029 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME php 6736 root 4u IPv4 49611460 0t0 TCP *:8029 (LISTEN)
在啟動某個服務的時候我們常常會遇到埠被占用的情況,此時,我們非常希望知道是什麼命令占用了這個埠,就可以用這個命令。
好了,這麼一圈下來,nohup和&應該大致有個瞭解了吧。