Linux系統狀態檢測及進程式控制制--2

火星人 @ 2014-03-08 , reply:0


Linux系統狀態檢測及進程式控制制--1 (http://crushlinux.blog.51cto.com/2663646/836481) 4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用后釋放)
5.
停止(

進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行運行) ps工具標識進程的5種狀態碼:
D
不可中斷 uninterruptible sleep (usually IO)
R
運行 runnable (on run queue)


S 中斷 sleeping
T
停止 traced or stopped
Z
僵死 a defunct (」zombie」) process 名稱:ps
使用許可權:所有使用者
使用方式:ps [options] [--help]
說明:顯示瞬間行程

(process) 的動態
參數:
ps
的參數非常多, 在此僅列出幾個常用的參數並大略介紹含義
-A
列出所有的行程
-w
顯示加寬可以顯示較多的資訊
-au

顯示較詳細的資訊
-aux
顯示所有包含其他使用者的行程 au(x) 輸出格式 : USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER:
行程擁有者
PID: pid
%CPU:
佔用的 CPU 使用率
%MEM:

佔用的記憶體使用率
VSZ:
佔用的虛擬記憶體大小
RSS:
佔用的記憶體大小
TTY:
終端的次要裝置號碼 (minor device number of tty)
STAT:
該行程的狀態:
D:
不可中斷的靜止
R:
正在執行中


S: 靜止狀態
T:
暫停執行
Z:
不存在但暫時無法消除
W:
沒有足夠的記憶體分頁可分配
<:
高優先序的行程
N:
低優先序的行程
L:
有記憶體分頁分配並鎖在記憶體內

(即時系統或捱A I/O)
START:
行程開始時間
TIME:
執行的時間
COMMAND:
所執行的指令 範例: ps
PID TTY TIME CMD
2791 ttyp0 00:00:00 tcsh
3092 ttyp0 00:00:00 ps
% ps -A
PID TTY TIME CMD
1 ? 00:00:03 init
2 ? 00:00:00 kflushd
3 ? 00:00:00 kpiod
4 ? 00:00:00 kswapd
5 ? 00:00:00 mdrecoveryd
....... % ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND


root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init [3]
root 2 0.0 0.0 0 0 ? SW Sep10 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW Sep10 0:00 [kpiod]
root 4 0.0 0.0 0 0 ? SW Sep10 0:00 [kswapd] 具體命令解釋如下:
  1ps a

顯示現行終端機下的所有程序,包括其他用戶的程序   2ps -A 顯示所有程序.   3

ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參 數或常駐服務的標示.

   4ps -e 此參數的效果和指定"A"參數相同.   5ps e

列出程序時,顯示每個程序所使用的環境變數   6ps f ASCII字元顯示樹狀結構,表達程序間的相互關係.

  7ps -H 顯示樹狀結構,表示程序間的相互關係.    8

ps -N 顯示所有的程序,除了執行ps指令終端 機下的程序之外.    9

ps s 採用程序信號的格式顯示程序狀況.    10ps S 列出程序時,包括已中斷的子程序資料.

   11ps -t<終端機編號> 指定終端機編號,並列出屬於該終端機的程序的

狀況.       12ps u

  以用戶為主的格式來顯示程序狀況.      13ps x

顯示所有程序,不以終端機來區分. 最常用的方法是 ps -aux,然後再利用一個管道符號導向到grep去查找特定的進

,然後再對特定 的進程進行操作.


kill命令詳解 1. 作用
kill
命令用來中止一個進程.
2.
格式
kill [
s signal |

p ] [ a ] pid ...
kill
l [ signal ]
3.
參數
s:指定發送的信號.
p:模擬發送信號.


l:指定信號的名稱列表.
pid
:要中止進程的ID號.
Signal
:表示信號.
4.
說明
進程是Linux

系統中一個非常重要的概念.Linux是一個多任務的操作系統,系統上經常同時運行著多個進程.我們不關心這些進程究竟是如何分配的,或者是
內核
如何管理分配時間片的,所關心的是如何去控制這些進程,讓它們能夠很好地為用戶服務.
Linux
操作系統包括三種不同類型的進程,每種進程都有自己的特點和屬性.交互進程是由一個Shell啟動的進程.交互進程既可以在前台運行,也可以在後台運行.批處理進程和終端沒有聯繫,是一個進程序列.監控進程(也稱系統守護進程)時Linux

系統啟動時啟動的進程,並在後台運行.例如,httpd是著名的Apache伺服器的監控進程.kill命令的工作原理是,向Linux系統的內核發送一個系統操作信號和某個程序的進程標識號,然後系統內核就可以對進程標識號指定的進程進行操作.比如在top命令中,我們看到系統運行許多進程,有時就需要使用kill

中止某些進程來提高系統資源.在講解安裝和登陸命令時,曾提到系統多個虛擬控制台的作用是當一個程序出錯造成系統死鎖時,可以切換到其它虛擬控制台工作關閉這個程序.此時使用的命令就是kill,因為kill是大多數Shell內部命令可以直接調用的.
5.
應用實例
1)強行中止(經常使用殺掉)一個進程標識號為324

的進程:
kill 9 324
2)解除Linux系統的死鎖
Linux中有時會發生這樣一種情況:一個程序崩潰,並且處於死鎖的狀態.此時一般不用重新啟動計算機,只需要中止

(或者說是關閉)這個有問題的程序即
可.當kill處於X-Window界面時,主要的程序(除了崩潰的程序之外)一般都已經正常啟動了.此時打開一個終端,在那裡中止有問題的程序.比如,


如果Mozilla瀏覽器程序出現了鎖死的情況,可以使用kill命令來中止所有包含有Mozolla瀏覽器的程序.top命令查處該程序的
PID
,然後使用kill命令停止這個程序:

kill SIGKILL XXX
其中,XXX是包含有Mozolla瀏覽器的程序的進程標識號.
3)使用命令回收內存
我們知道內存對於系統是非常重要的,回收內存可以提高系統資源.kill

命令可以及時地中止一些越軌的程序或很長時間沒有相應的程序.例如,使用top命令發現一個無用 (Zombie) 的進程,此時可以使用下面命令:
kill 9 XXX

其中,XXX是無用的進程標識號.
然後使用下面命令:
free
此時會發現可用內存容量增加了.
4killall命令


Linux下還提供了一個killall命令,可以直接使用進程的名字而不是進程標識號,例如:
killall -HUP inetd
*
殺死進程最安全的方法是單純使用kill命令,不加修飾符,不帶標誌.
使用ps -ef

命令確定要殺死進程的PID,然後輸入以下命令:
# kill -pid
註釋:標準的kill命令通常都能達到目的.終止有問題的進程,並把進程的資源釋放給系統.然而,如果進程啟動了子進程,只殺死父進程,子進程仍在運行,因此仍消耗資源.為了防止這些所謂的殭屍進程,應確保在殺死父進程之前,先殺死其所有的子進程.
*

確定要殺死進程的PIDPPID
# ps -ef | grep httpd
*
以優雅的方式結束進程
# kill -l PID
-l選項告訴kill命令用好像啟動進程的用戶已註銷的方式結束進程.當使用該選項時,kill命令也試圖殺死所留下的子進程.但這個命令也不是總能成功

--或許仍然需要先手工殺死子進程,然後再殺死父進程. *TERM信號給父進程發送一個TERM信號,試圖殺死它和它的子進程.
# kill -TERM PPID
*killall
命令
killall
命令殺死同一進程組內的所有進程.其允許指定要終止的進程的名稱,而非PID

.
# killall httpd
*
停止和重啟進程
有時候只想簡單的停止和重啟進程.如下:
# kill -HUP PID
該命令讓Linux和緩的執行進程關閉,然後立即重啟.在配置應用程序的時候,這個命令很方便,在對配置文件修改後需要重啟進程時就可以執行此命令.
*
絕殺 kill -9 PID

同意的 kill -s SIGKILL
這個強大和危險的命令迫使進程在運行時突然終止,進程在結束后不能自我清理.危害是導致系統資源無法正常釋放,一般不推薦使用,除非其他辦法都無效.
當使用此命令時,一定要通過ps -ef確認沒有剩下任何殭屍進程.只能通過終止父進程來消除殭屍進程.如果殭屍進程被init收養,問題就比較嚴重了.殺死init進程意味著關閉系統.

如果系統中有殭屍進程,並且其父進程是init,殭屍進程佔用了大量的系統資源,那麼就需要在某個時候重啟機器以清除進程表了 *killall -9 httpd skill -9 root skill -9 pts/2 pkill –u root fuser –k /dev/pts/1 進程的優先順序 pstree 以樹形結構顯示進程

-20----19 -20優先順序最高,19最低) < 表示高優先順序 N 表示低優先順序 nice -n -10 updatedb & updatedb &

top r 進程PID 優先順序 (更改優先順序) renice -18 2222 調整優先順序 *init 是所有進程的父進程 find / -name aaa &

vi & jobs 查看後台程序 kill %1 殺掉第一個 fg %3 將後台的進程拿到前台 bg %3 讓進程在後台運行起來 updated Ctrl z

暫停並丟入後台 nohup updated & shell退出後進程仍然運行,作為系統進程.

本文出自 「linux」 博客,謝絕轉載!




[火星人 via ] Linux系統狀態檢測及進程式控制制--2已經有150次圍觀

http://www.coctec.com/docs/linux/show-post-46167.html