前臺與后臺進程
每個進程都可能以兩種方式存在:前臺(Foreground)與后臺(Background)。所謂前臺進程,就是用戶目前在屏幕上進行操作的進程;而后臺進程則是實際上在操作,但由屏幕上并無法看到的進程。
通常使用后臺方式執行的情況是,當此進程較為復雜且必須執行較長的時間時,我們會將它置于后臺中執行,以避免占用屏幕的時間過久,而無法執行其他的進程。
系統的服務一般都是以后臺進程的方式存在的 ,而且都會駐留在系統中,直到關機時才結束,這類服務我們也稱為 Daemon ,在Linux系統中就包含許多Daemon。
判斷Daemon 最簡單的方法就是由名稱來判斷,多數Daemon都是由 服務名稱加上d來產生的 ,例如HTTP服務的Daemon為httpd。
顯示目前進程 ps
ps命令是Process Status的縮寫,它的功能是查看目前的系統中有哪些進程正在執行,以及它們的執行情況。您可以直接輸入ps命令名稱而不加任何參數。
如果直接執行ps命令,則會出現類似以下的信息:
[root@ns1 ~]# ps
|
上述ps命令顯示的數據共分為4個字段,它們的說明如下:
PID:進程標識(Process ID),系統即是憑著這個編號來識別及處理此進程的。
TTY:Teletypewriter,登錄的終端機編號。
TIME:此進程所消耗的CPU時間。
CMD:正在執行的命令或進程名稱。
上述的信息是ps命令顯示的最基本數據畫面,其實ps支持非常多的參數。因為ps是非常常用的命令,所以本書在此將說明其中較為重要的參數的使用方法。
顯示詳細信息 ps -l
如果需要更詳細的系統數據,可以使用-l(Long)參數,它除了顯示ps命令的4個基本字段數據外,另外還有10個額外數據可供查看,這些額外數據的內容及說明如下:
[root@ns1 ~]# ps -l
|
F :該進程狀態的標志(Flag),表12-1是較常用的標志及說明。
表12-1 進程狀態標志說明
標 志 名 稱標 志 代 碼說 明
ALIGNWARN001打印警告信息
STARTING002進程正在初始化
EXITING004系統正在關機
PTRACED010表示已調用ptrace(0)
TRACESYS020跟蹤System Call
FORKNOEXEC040已執行fork但沒有執行exec
SUPERPRIV100以root身份執行
DUMPCORE200內核轉儲
SIGNALED400以Signal結束進程
S :進程狀態代碼(Process State Codes),可用的代碼及說明如表12-2所示。
表12-2 進程狀態代碼說明
代碼說明
D不可中斷的閑置狀態(Uninterruptible Sleep)
R可執行的
S閑置狀態
(續)
代碼說明
T跟蹤或停止
Z已死亡的進程(Zombie)
W沒有足夠的內存頁可分配
<高優先級的進程
N低優先級的進程
L有內存頁分配并鎖在內存內
UID :進程執行者的ID(User ID)。
PPID :父進程標識(Parent Process ID)。
PRI :進程執行的優先級(Priority)。
NI :nice,是指進程執行優先級的nice值,負值表示其優先級較高。
SZ :Size,進程所占用的內存大小,以KB為單位。
WCHAN :Waiting Channel,表示進程或系統調用等待時的地址。
ps -u
另一種顯示詳細內容信息的參數為-u(User),它的主要功能是將進程數據以用戶的格式來顯示,以下是部分的示例內容以及新的字段說明:
[root@ns1 ~]# ps -u
|
顯示后臺進程 ps -x
其實,系統中目前執行的進程絕不是只有輸入ps命令時的數目,事實上有為數更多的進程以后臺的方式來執行,它們一般都是系統的服務(Daemon),或是用戶利用&來處理的進程。如果要查看這些后臺進程,可以使用-x參數,以下是部分的示例內容:
[root@ns1 ~]# ps -x
|
有經驗的管理員一般都習慣一次查看所有用戶執行的進程以及后臺進程,此時可以使用-aux參數。
雖然 -aux參數可以提供最詳盡的信息,但是有時并不是很容易找出所需的信息,因此我們可 配合使用grep命令,以縮小查看的范圍。以下是找出與用戶jack有關的進程及其內容的示例:
[root@ns1 ~]# ps -aux | grep jack
|
....
結束執行中的進程
如果某個進程執行到一半時中斷,或消耗太多的系統資源,例如內存數量及CPU時間,此時您可以考慮使用kill命令來將指定的信號傳送到該進程。
雖然kill命令可以傳送的信號有很多種,但以SIGTERM(15)或SIGKILL(9)居多,它們都是用來結束進程執行的。您可以使用-l參數來查看所有可供傳送的信號,如圖12-2所示。
![]() |
圖12-2 kill命令可傳送的信號 |
因為kill命令在使用時必須通過進程ID來指定信號的接收進程,所以需先以ps命令來得知要傳送的PID,之后再使用kill命令加上指定的PID來送出終止信號以結束進程。
以下示例假設要終止PID 16525進程的執行:
[root@ns1 ~]# kill 16525
因為有些進程會捕捉某些信號,所以當直接指定PID無法終止其進程時,您可以使用-9參數,它代表送出SIGKILL信號。
[root@ns1 ~]# kill -9 16525
如果使用-9參數仍無法結束該進程,還可以嘗試使用-15參數來送出SIGTERM信號;如果連-15參數都無法成功地刪除此進程,則只有重新啟動這一方法了。
通常,極難刪除的進程大多與系統運行有關聯,如果刪除后可能會影響系統的性能或執行,因此最好不要養成直接使用-9和-15參數的習慣。
[root@ns1 ~]# kill -15 16525
kill命令另外一個常用的時機是,當對某個Daemon進行修改或設置后,您可以使用-HUP(Hang Up)參數來重新啟動該進程,這可減少重新啟動計算機的時間。
[root@ns1 ~]# kill -HUP 16525
本文為張軍原創文章,轉載無需和我聯系,但請注明來自張軍的軍軍小站,個人博客http://m.eyofj.com
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
