Linux系统状态检测及进程控制--2
生活随笔
收集整理的這篇文章主要介紹了
Linux系统状态检测及进程控制--2
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Linux系統(tǒng)狀態(tài)檢測(cè)及進(jìn)程控制--1(http://crushlinux.blog.51cto.com/2663646/836481)4.僵死(進(jìn)程已終止,但進(jìn)程描述符存在,直到父進(jìn)程調(diào)用wait4()系統(tǒng)調(diào)用后釋放)
5.停止(進(jìn)程收到SIGSTOP,SIGSTP,SIGTIN,SIGTOU信號(hào)后停止運(yùn)行運(yùn)行)ps工具標(biāo)識(shí)進(jìn)程的5種狀態(tài)碼:
D不可中斷uninterruptiblesleep(usuallyIO)
R運(yùn)行runnable(onrunqueue)
S中斷sleeping
T停止tracedorstopped
Z僵死adefunct(”zombie”)process名稱:ps
使用權(quán)限:所有使用者
使用方式:ps[options][--help]
說明:顯示瞬間行程(process)的動(dòng)態(tài)
參數(shù):
ps的參數(shù)非常多,在此僅列出幾個(gè)常用的參數(shù)并大略介紹含義
-A列出所有的行程
-w顯示加寬可以顯示較多的資訊
-au顯示較詳細(xì)的資訊
-aux顯示所有包含其他使用者的行程au(x)輸出格式:USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
USER:行程擁有者
PID:pid
%CPU:占用的CPU使用率
%MEM:占用的記憶體使用率
VSZ:占用的虛擬記憶體大小
RSS:占用的記憶體大小
TTY:終端的次要裝置號(hào)碼(minordevicenumberoftty)
STAT:該行程的狀態(tài):
D:不可中斷的靜止
R:正在執(zhí)行中
S:靜止?fàn)顟B(tài)
T:暫停執(zhí)行
Z:不存在但暫時(shí)無法消除
W:沒有足夠的記憶體分頁可分配
<:高優(yōu)先序的行程
N:低優(yōu)先序的行程
L:有記憶體分頁分配并鎖在記憶體內(nèi)(即時(shí)系統(tǒng)或捱AI/O)
START:行程開始時(shí)間
TIME:執(zhí)行的時(shí)間
COMMAND:所執(zhí)行的指令范例:ps
PIDTTYTIMECMD
2791ttyp000:00:00tcsh
3092ttyp000:00:00ps
%ps-A
PIDTTYTIMECMD
1?00:00:03init
2?00:00:00kflushd
3?00:00:00kpiod
4?00:00:00kswapd
5?00:00:00mdrecoveryd
.......%ps-aux
kill命令用來中止一個(gè)進(jìn)程。
2.格式
kill[-ssignal|-p][-a]pid...
kill-l[signal]
3.參數(shù)
-s:指定發(fā)送的信號(hào)。
-p:模擬發(fā)送信號(hào)。
-l:指定信號(hào)的名稱列表。
pid:要中止進(jìn)程的ID號(hào)。
Signal:表示信號(hào)。
4.說明
進(jìn)程是Linux系統(tǒng)中一個(gè)非常重要的概念。Linux是一個(gè)多任務(wù)的操作系統(tǒng),系統(tǒng)上經(jīng)常同時(shí)運(yùn)行著多個(gè)進(jìn)程。我們不關(guān)心這些進(jìn)程究竟是如何分配的,或者是
內(nèi)核
如何管理分配時(shí)間片的,所關(guān)心的是如何去控制這些進(jìn)程,讓它們能夠很好地為用戶服務(wù)。
Linux操作系統(tǒng)包括三種不同類型的進(jìn)程,每種進(jìn)程都有自己的特點(diǎn)和屬性。交互進(jìn)程是由一個(gè)Shell啟動(dòng)的進(jìn)程。交互進(jìn)程既可以在前臺(tái)運(yùn)行,也可以在后臺(tái)運(yùn)行。批處理進(jìn)程和終端沒有聯(lián)系,是一個(gè)進(jìn)程序列。監(jiān)控進(jìn)程(也稱系統(tǒng)守護(hù)進(jìn)程)時(shí)Linux系統(tǒng)啟動(dòng)時(shí)啟動(dòng)的進(jìn)程,并在后臺(tái)運(yùn)行。例如,httpd是著名的Apache服務(wù)器的監(jiān)控進(jìn)程。kill命令的工作原理是,向Linux系統(tǒng)的內(nèi)核發(fā)送一個(gè)系統(tǒng)操作信號(hào)和某個(gè)程序的進(jìn)程標(biāo)識(shí)號(hào),然后系統(tǒng)內(nèi)核就可以對(duì)進(jìn)程標(biāo)識(shí)號(hào)指定的進(jìn)程進(jìn)行操作。比如在top命令中,我們看到系統(tǒng)運(yùn)行許多進(jìn)程,有時(shí)就需要使用kill中止某些進(jìn)程來提高系統(tǒng)資源。在講解安裝和登陸命令時(shí),曾提到系統(tǒng)多個(gè)虛擬控制臺(tái)的作用是當(dāng)一個(gè)程序出錯(cuò)造成系統(tǒng)死鎖時(shí),可以切換到其它虛擬控制臺(tái)工作關(guān)閉這個(gè)程序。此時(shí)使用的命令就是kill,因?yàn)?/span>kill是大多數(shù)Shell內(nèi)部命令可以直接調(diào)用的。
5.應(yīng)用實(shí)例
(1)強(qiáng)行中止(經(jīng)常使用殺掉)一個(gè)進(jìn)程標(biāo)識(shí)號(hào)為324的進(jìn)程:
#kill-9324
(2)解除Linux系統(tǒng)的死鎖
在Linux中有時(shí)會(huì)發(fā)生這樣一種情況:一個(gè)程序崩潰,并且處于死鎖的狀態(tài)。此時(shí)一般不用重新啟動(dòng)計(jì)算機(jī),只需要中止(或者說是關(guān)閉)這個(gè)有問題的程序即
可。當(dāng)kill處于X-Window界面時(shí),主要的程序(除了崩潰的程序之外)一般都已經(jīng)正常啟動(dòng)了。此時(shí)打開一個(gè)終端,在那里中止有問題的程序。比如,
如果Mozilla瀏覽器程序出現(xiàn)了鎖死的情況,可以使用kill命令來中止所有包含有Mozolla瀏覽器的程序。首先用top命令查處該程序的
PID,然后使用kill命令停止這個(gè)程序:
#kill-SIGKILLXXX
其中,XXX是包含有Mozolla瀏覽器的程序的進(jìn)程標(biāo)識(shí)號(hào)。
(3)使用命令回收內(nèi)存
我們知道內(nèi)存對(duì)于系統(tǒng)是非常重要的,回收內(nèi)存可以提高系統(tǒng)資源。kill命令可以及時(shí)地中止一些“越軌”的程序或很長時(shí)間沒有相應(yīng)的程序。例如,使用top命令發(fā)現(xiàn)一個(gè)無用(Zombie)的進(jìn)程,此時(shí)可以使用下面命令:
#kill-9XXX
其中,XXX是無用的進(jìn)程標(biāo)識(shí)號(hào)。
然后使用下面命令:
#free
此時(shí)會(huì)發(fā)現(xiàn)可用內(nèi)存容量增加了。
(4)killall命令
Linux下還提供了一個(gè)killall命令,可以直接使用進(jìn)程的名字而不是進(jìn)程標(biāo)識(shí)號(hào),例如:
#killall-HUPinetd
*殺死進(jìn)程最安全的方法是單純使用kill命令,不加修飾符,不帶標(biāo)志。
首先使用ps-ef命令確定要?dú)⑺肋M(jìn)程的PID,然后輸入以下命令:
#kill-pid
注釋:標(biāo)準(zhǔn)的kill命令通常都能達(dá)到目的。終止有問題的進(jìn)程,并把進(jìn)程的資源釋放給系統(tǒng)。然而,如果進(jìn)程啟動(dòng)了子進(jìn)程,只殺死父進(jìn)程,子進(jìn)程仍在運(yùn)行,因此仍消耗資源。為了防止這些所謂的“僵尸進(jìn)程”,應(yīng)確保在殺死父進(jìn)程之前,先殺死其所有的子進(jìn)程。
*確定要?dú)⑺肋M(jìn)程的PID或PPID
#ps-ef|grephttpd
*以優(yōu)雅的方式結(jié)束進(jìn)程
#kill-lPID
-l選項(xiàng)告訴kill命令用好像啟動(dòng)進(jìn)程的用戶已注銷的方式結(jié)束進(jìn)程。當(dāng)使用該選項(xiàng)時(shí),kill命令也試圖殺死所留下的子進(jìn)程。但這個(gè)命令也不是總能成功--或許仍然需要先手工殺死子進(jìn)程,然后再殺死父進(jìn)程。*TERM信號(hào)給父進(jìn)程發(fā)送一個(gè)TERM信號(hào),試圖殺死它和它的子進(jìn)程。
#kill-TERMPPID
*killall命令
killall命令殺死同一進(jìn)程組內(nèi)的所有進(jìn)程。其允許指定要終止的進(jìn)程的名稱,而非PID。
#killallhttpd
*停止和重啟進(jìn)程
有時(shí)候只想簡單的停止和重啟進(jìn)程。如下:
#kill-HUPPID
該命令讓Linux和緩的執(zhí)行進(jìn)程關(guān)閉,然后立即重啟。在配置應(yīng)用程序的時(shí)候,這個(gè)命令很方便,在對(duì)配置文件修改后需要重啟進(jìn)程時(shí)就可以執(zhí)行此命令。
*絕殺kill-9PID
同意的kill-sSIGKILL
這個(gè)強(qiáng)大和危險(xiǎn)的命令迫使進(jìn)程在運(yùn)行時(shí)突然終止,進(jìn)程在結(jié)束后不能自我清理。危害是導(dǎo)致系統(tǒng)資源無法正常釋放,一般不推薦使用,除非其他辦法都無效。
當(dāng)使用此命令時(shí),一定要通過ps-ef確認(rèn)沒有剩下任何僵尸進(jìn)程。只能通過終止父進(jìn)程來消除僵尸進(jìn)程。如果僵尸進(jìn)程被init收養(yǎng),問題就比較嚴(yán)重了。殺死init進(jìn)程意味著關(guān)閉系統(tǒng)。
如果系統(tǒng)中有僵尸進(jìn)程,并且其父進(jìn)程是init,而且僵尸進(jìn)程占用了大量的系統(tǒng)資源,那么就需要在某個(gè)時(shí)候重啟機(jī)器以清除進(jìn)程表了*killall-9httpdskill-9rootskill-9pts/2pkill–urootfuser–k/dev/pts/1進(jìn)程的優(yōu)先級(jí)pstree以樹形結(jié)構(gòu)顯示進(jìn)程-20----19(-20優(yōu)先級(jí)最高,19最低)<表示高優(yōu)先級(jí)N表示低優(yōu)先級(jí)nice-n-10updatedb&updatedb&topr進(jìn)程PID優(yōu)先級(jí)(更改優(yōu)先級(jí))renice-182222調(diào)整優(yōu)先級(jí)*init是所有進(jìn)程的父進(jìn)程find/-nameaaa&vi&jobs查看后臺(tái)程序kill%1殺掉第一個(gè)fg%3將后臺(tái)的進(jìn)程拿到前臺(tái)bg%3讓進(jìn)程在后臺(tái)運(yùn)行起來updatedCtrl+z暫停并丟入后臺(tái)nohupupdated&在shell退出后進(jìn)程仍然運(yùn)行,作為系統(tǒng)進(jìn)程。
5.停止(進(jìn)程收到SIGSTOP,SIGSTP,SIGTIN,SIGTOU信號(hào)后停止運(yùn)行運(yùn)行)ps工具標(biāo)識(shí)進(jìn)程的5種狀態(tài)碼:
D不可中斷uninterruptiblesleep(usuallyIO)
R運(yùn)行runnable(onrunqueue)
S中斷sleeping
T停止tracedorstopped
Z僵死adefunct(”zombie”)process名稱:ps
使用權(quán)限:所有使用者
使用方式:ps[options][--help]
說明:顯示瞬間行程(process)的動(dòng)態(tài)
參數(shù):
ps的參數(shù)非常多,在此僅列出幾個(gè)常用的參數(shù)并大略介紹含義
-A列出所有的行程
-w顯示加寬可以顯示較多的資訊
-au顯示較詳細(xì)的資訊
-aux顯示所有包含其他使用者的行程au(x)輸出格式:USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
USER:行程擁有者
PID:pid
%CPU:占用的CPU使用率
%MEM:占用的記憶體使用率
VSZ:占用的虛擬記憶體大小
RSS:占用的記憶體大小
TTY:終端的次要裝置號(hào)碼(minordevicenumberoftty)
STAT:該行程的狀態(tài):
D:不可中斷的靜止
R:正在執(zhí)行中
S:靜止?fàn)顟B(tài)
T:暫停執(zhí)行
Z:不存在但暫時(shí)無法消除
W:沒有足夠的記憶體分頁可分配
<:高優(yōu)先序的行程
N:低優(yōu)先序的行程
L:有記憶體分頁分配并鎖在記憶體內(nèi)(即時(shí)系統(tǒng)或捱AI/O)
START:行程開始時(shí)間
TIME:執(zhí)行的時(shí)間
COMMAND:所執(zhí)行的指令范例:ps
PIDTTYTIMECMD
2791ttyp000:00:00tcsh
3092ttyp000:00:00ps
%ps-A
PIDTTYTIMECMD
1?00:00:03init
2?00:00:00kflushd
3?00:00:00kpiod
4?00:00:00kswapd
5?00:00:00mdrecoveryd
.......%ps-aux
| 123456789101112131415 | USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMANDroot10.00.71096472?SSep100:03init[3]root20.00.000?SWSep100:00[kflushd]root30.00.000?SWSep100:00[kpiod]root40.00.000?SWSep100:00[kswapd]具體命令解釋如下:psa顯示現(xiàn)行終端機(jī)下的所有程序,包括其他用戶的程序"A"參數(shù)相同。5)6)ps指令終端機(jī)下的程序之外。pss采用程序信號(hào)的格式顯示程序狀況。>指定終端機(jī)編號(hào),并列出屬于該終端機(jī)的程序的最常用的方法是,然后再對(duì)特定的進(jìn)程進(jìn)行操作。kill命令詳解 |
1.作用
kill命令用來中止一個(gè)進(jìn)程。
2.格式
kill[-ssignal|-p][-a]pid...
kill-l[signal]
3.參數(shù)
-s:指定發(fā)送的信號(hào)。
-p:模擬發(fā)送信號(hào)。
-l:指定信號(hào)的名稱列表。
pid:要中止進(jìn)程的ID號(hào)。
Signal:表示信號(hào)。
4.說明
進(jìn)程是Linux系統(tǒng)中一個(gè)非常重要的概念。Linux是一個(gè)多任務(wù)的操作系統(tǒng),系統(tǒng)上經(jīng)常同時(shí)運(yùn)行著多個(gè)進(jìn)程。我們不關(guān)心這些進(jìn)程究竟是如何分配的,或者是
內(nèi)核
如何管理分配時(shí)間片的,所關(guān)心的是如何去控制這些進(jìn)程,讓它們能夠很好地為用戶服務(wù)。
Linux操作系統(tǒng)包括三種不同類型的進(jìn)程,每種進(jìn)程都有自己的特點(diǎn)和屬性。交互進(jìn)程是由一個(gè)Shell啟動(dòng)的進(jìn)程。交互進(jìn)程既可以在前臺(tái)運(yùn)行,也可以在后臺(tái)運(yùn)行。批處理進(jìn)程和終端沒有聯(lián)系,是一個(gè)進(jìn)程序列。監(jiān)控進(jìn)程(也稱系統(tǒng)守護(hù)進(jìn)程)時(shí)Linux系統(tǒng)啟動(dòng)時(shí)啟動(dòng)的進(jìn)程,并在后臺(tái)運(yùn)行。例如,httpd是著名的Apache服務(wù)器的監(jiān)控進(jìn)程。kill命令的工作原理是,向Linux系統(tǒng)的內(nèi)核發(fā)送一個(gè)系統(tǒng)操作信號(hào)和某個(gè)程序的進(jìn)程標(biāo)識(shí)號(hào),然后系統(tǒng)內(nèi)核就可以對(duì)進(jìn)程標(biāo)識(shí)號(hào)指定的進(jìn)程進(jìn)行操作。比如在top命令中,我們看到系統(tǒng)運(yùn)行許多進(jìn)程,有時(shí)就需要使用kill中止某些進(jìn)程來提高系統(tǒng)資源。在講解安裝和登陸命令時(shí),曾提到系統(tǒng)多個(gè)虛擬控制臺(tái)的作用是當(dāng)一個(gè)程序出錯(cuò)造成系統(tǒng)死鎖時(shí),可以切換到其它虛擬控制臺(tái)工作關(guān)閉這個(gè)程序。此時(shí)使用的命令就是kill,因?yàn)?/span>kill是大多數(shù)Shell內(nèi)部命令可以直接調(diào)用的。
5.應(yīng)用實(shí)例
(1)強(qiáng)行中止(經(jīng)常使用殺掉)一個(gè)進(jìn)程標(biāo)識(shí)號(hào)為324的進(jìn)程:
#kill-9324
(2)解除Linux系統(tǒng)的死鎖
在Linux中有時(shí)會(huì)發(fā)生這樣一種情況:一個(gè)程序崩潰,并且處于死鎖的狀態(tài)。此時(shí)一般不用重新啟動(dòng)計(jì)算機(jī),只需要中止(或者說是關(guān)閉)這個(gè)有問題的程序即
可。當(dāng)kill處于X-Window界面時(shí),主要的程序(除了崩潰的程序之外)一般都已經(jīng)正常啟動(dòng)了。此時(shí)打開一個(gè)終端,在那里中止有問題的程序。比如,
如果Mozilla瀏覽器程序出現(xiàn)了鎖死的情況,可以使用kill命令來中止所有包含有Mozolla瀏覽器的程序。首先用top命令查處該程序的
PID,然后使用kill命令停止這個(gè)程序:
#kill-SIGKILLXXX
其中,XXX是包含有Mozolla瀏覽器的程序的進(jìn)程標(biāo)識(shí)號(hào)。
(3)使用命令回收內(nèi)存
我們知道內(nèi)存對(duì)于系統(tǒng)是非常重要的,回收內(nèi)存可以提高系統(tǒng)資源。kill命令可以及時(shí)地中止一些“越軌”的程序或很長時(shí)間沒有相應(yīng)的程序。例如,使用top命令發(fā)現(xiàn)一個(gè)無用(Zombie)的進(jìn)程,此時(shí)可以使用下面命令:
#kill-9XXX
其中,XXX是無用的進(jìn)程標(biāo)識(shí)號(hào)。
然后使用下面命令:
#free
此時(shí)會(huì)發(fā)現(xiàn)可用內(nèi)存容量增加了。
(4)killall命令
Linux下還提供了一個(gè)killall命令,可以直接使用進(jìn)程的名字而不是進(jìn)程標(biāo)識(shí)號(hào),例如:
#killall-HUPinetd
*殺死進(jìn)程最安全的方法是單純使用kill命令,不加修飾符,不帶標(biāo)志。
首先使用ps-ef命令確定要?dú)⑺肋M(jìn)程的PID,然后輸入以下命令:
#kill-pid
注釋:標(biāo)準(zhǔn)的kill命令通常都能達(dá)到目的。終止有問題的進(jìn)程,并把進(jìn)程的資源釋放給系統(tǒng)。然而,如果進(jìn)程啟動(dòng)了子進(jìn)程,只殺死父進(jìn)程,子進(jìn)程仍在運(yùn)行,因此仍消耗資源。為了防止這些所謂的“僵尸進(jìn)程”,應(yīng)確保在殺死父進(jìn)程之前,先殺死其所有的子進(jìn)程。
*確定要?dú)⑺肋M(jìn)程的PID或PPID
#ps-ef|grephttpd
*以優(yōu)雅的方式結(jié)束進(jìn)程
#kill-lPID
-l選項(xiàng)告訴kill命令用好像啟動(dòng)進(jìn)程的用戶已注銷的方式結(jié)束進(jìn)程。當(dāng)使用該選項(xiàng)時(shí),kill命令也試圖殺死所留下的子進(jìn)程。但這個(gè)命令也不是總能成功--或許仍然需要先手工殺死子進(jìn)程,然后再殺死父進(jìn)程。*TERM信號(hào)給父進(jìn)程發(fā)送一個(gè)TERM信號(hào),試圖殺死它和它的子進(jìn)程。
#kill-TERMPPID
*killall命令
killall命令殺死同一進(jìn)程組內(nèi)的所有進(jìn)程。其允許指定要終止的進(jìn)程的名稱,而非PID。
#killallhttpd
*停止和重啟進(jìn)程
有時(shí)候只想簡單的停止和重啟進(jìn)程。如下:
#kill-HUPPID
該命令讓Linux和緩的執(zhí)行進(jìn)程關(guān)閉,然后立即重啟。在配置應(yīng)用程序的時(shí)候,這個(gè)命令很方便,在對(duì)配置文件修改后需要重啟進(jìn)程時(shí)就可以執(zhí)行此命令。
*絕殺kill-9PID
同意的kill-sSIGKILL
這個(gè)強(qiáng)大和危險(xiǎn)的命令迫使進(jìn)程在運(yùn)行時(shí)突然終止,進(jìn)程在結(jié)束后不能自我清理。危害是導(dǎo)致系統(tǒng)資源無法正常釋放,一般不推薦使用,除非其他辦法都無效。
當(dāng)使用此命令時(shí),一定要通過ps-ef確認(rèn)沒有剩下任何僵尸進(jìn)程。只能通過終止父進(jìn)程來消除僵尸進(jìn)程。如果僵尸進(jìn)程被init收養(yǎng),問題就比較嚴(yán)重了。殺死init進(jìn)程意味著關(guān)閉系統(tǒng)。
如果系統(tǒng)中有僵尸進(jìn)程,并且其父進(jìn)程是init,而且僵尸進(jìn)程占用了大量的系統(tǒng)資源,那么就需要在某個(gè)時(shí)候重啟機(jī)器以清除進(jìn)程表了*killall-9httpdskill-9rootskill-9pts/2pkill–urootfuser–k/dev/pts/1進(jìn)程的優(yōu)先級(jí)pstree以樹形結(jié)構(gòu)顯示進(jìn)程-20----19(-20優(yōu)先級(jí)最高,19最低)<表示高優(yōu)先級(jí)N表示低優(yōu)先級(jí)nice-n-10updatedb&updatedb&topr進(jìn)程PID優(yōu)先級(jí)(更改優(yōu)先級(jí))renice-182222調(diào)整優(yōu)先級(jí)*init是所有進(jìn)程的父進(jìn)程find/-nameaaa&vi&jobs查看后臺(tái)程序kill%1殺掉第一個(gè)fg%3將后臺(tái)的進(jìn)程拿到前臺(tái)bg%3讓進(jìn)程在后臺(tái)運(yùn)行起來updatedCtrl+z暫停并丟入后臺(tái)nohupupdated&在shell退出后進(jìn)程仍然運(yùn)行,作為系統(tǒng)進(jìn)程。
本文出自“Crushlinux工作室”博客,謝絕轉(zhuǎn)載!
轉(zhuǎn)載于:https://blog.51cto.com/lytlinux/1308876
總結(jié)
以上是生活随笔為你收集整理的Linux系统状态检测及进程控制--2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业必备:商业智能中应该具备的3种仪表盘
- 下一篇: jQuery Easing 动画效果扩展