【Linux命令】nohup和&差異,查看進程和終止進程!


最近在開發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和&應該大致有個了解了吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM