初學Linux之程序進程管理工具匯總
生活中,我們在使用智能手機的過程中,比如 Android 平臺手機,多多少少會碰到程序運行無響應的情況,這個時候,我們就會點擊任務按鍵,進入后臺任務中,將程序的后臺窗口直接清除,然后重新打開應用程序,之后即可恢復正常使用了。這種情況在 Windows 平臺的計算機上也是偶爾會出現的。我們同樣會使用 CTRL+Alt+Delete 組合鍵,開啟任務管理器,在進程界面,右鍵沒有響應的程序,結束任務,之后將程序重新啟動。
我們也會發現,手機的硬件性能經常會影響到程序的運行,比如,早期型號的手機在開啟幾個應用,最先開啟的應用程序,后臺切換到前臺時,就要重新加載,和重新打開一樣,同時開啟很多的程序的情況下,各個程序運行都有一定的卡頓了,而使用較新硬件的型號,則能個流暢的切換后臺程序以及運行。其實這些主要是設備的內存大小和cpu計算性能提升帶來的改變。這也從反映出,應用程序運行了就成為了進程,進程就是運行中的程序。內存大了我們就能開啟更多的進程,那么說明進程是需要占用內存的空間的,cpu計算能力強了,就能穩定的運行程序,說明進程需要cpu的計算。有些應用能夠在一個設備上開啟多個,且相互之間都不干擾,說明進程可以是相對獨立的。
以上都是我們在使用計算機和智能移動設備的直觀的感受,由于設備之間的原理是相似的,回到我們要學習的Linux系統中,它的進程和硬件的關系也是如此。只是不同系統之間,對進程查看以及管理的方式是不同的。我們下面要了解的就是Linux系統的進程管理方法,它主要是通過一些工具實現的,這些工具有些比較復雜強大 ,有些則比較簡單直觀,我們可以根據個人的習慣和工作要求進行掌握和使用。
這里不介紹進程相關的原理,后續我們獨立開設篇幅討論進程和內存以及cpu的工作原理。但是有很多和進程相關的概念,我們需要先進行了解,這些概念都是很好理解的。
1、pstree
首先要介紹的是 pstree 這個工具,是可以如樹狀圖一樣顯示進程上下結構的命令。(參數支持uid 、pid、username)
具體的用法是? pstree ?? [選項] ?? [PID或者用戶名] 。常用的選項有 -p 顯示 PID 、-a 顯示程序進程的參數? 、-s(7版本支持)顯示父進程的信息 。
2、ps
ps? 是一個使用比較廣泛的進程管理工具,由于這個工具在不同的系統中發展應用,催生了不同選項使用風格,正常的是在選項前帶一個? “ – ” 的,這中是UNIX版本的風格,不帶 “ – ”符號的是? BSD 版本的風格,帶有 “ — ”的,是GNU版本的風格。(參數支持uid 、gid、username、pid、cmd、terminal)
ps 在不跟選項的情況下,默認是顯示當前終端設備中的進程。顯示的信息包括(PID 、TTY終端 、TIME運行時長、 CMD命令)
使用watch實用程序執行重復的輸出以實現對就程進行實時的監視,如下面的命令顯示每秒鐘的監視: watch -n 1 ‘ps -eo pid,ppid,cmd,%mem,%cpu –sort=%mem | head’
3、pidof
這個工具可通過程序的名稱輸出進程的 PID ,比如需要查詢程序名稱為? pidof 的PID :pidof? pidof 。(參數支持 cmd)
若是命令成功運行,說明進程是成功運行的,運行返回值為真,否則說明程序對應的進程已經關閉,需要重新開啟,這個可以用以監控系統中的服務是否保持正常運行。
4、pgrep
這個工具相當于 ps 和 grep 命令的結合體,之前介紹了 grep 命令是支持正則表達的,pgrep 命令也是支持正則表達,而且是擴展正則表達(ERE)。(參數支持uid 、gid、username、pid、cmd、terminal)
5、top
top? 是一個動態交互的進程管理工具,是一個集合進程監控、進程優先級調整、終止指定進程為一體的工具。top不光顯示單個進程的信息,它的操作界面的上端是對主機CPU、內存等整個運行狀態動態顯示。非常好用的一個進程管理工具。
直接在命令行輸入 top 并回車,就會進入進程管理界面。
top工具管理界面主要分為兩大部分,以白色背景的行為分割,上部分為系統硬件總體信息,下部分是各個單獨進程的信息。
上部分按照行分為:1、uptime 信息;2-3、task和cpu占用情況信息;4-5、內存相關信息;6:空白行,內置命令輸入區。若是需要了解內置命令的使用方法,可以輸入“?”查看各個命令對應的字符輸入。常用的有:P :以CPU占比對下方所有的進程進行排序(大到?。籑 :以內存占比對進程排序(大到?。籯 :發送型號控制進程的運行,是通過PID的,默認是終止進程(15信號),也可以通其他信號控制,支持數字和字母 。兩種方法取消k操作:1、提示PID時,直接回車;2、提示信號時,輸入0即可。
CPU一行具體的顯示內容是:us:用戶空間 ,sy:內核空間 ,ni:調整nice時間, id:空閑 ,wa:等待IO時間, hi:硬中斷, si:軟中斷(模式切換), st:虛擬機偷走的時間(主機上由虛擬機運行時可以顯示) 。
top管理界面對各個進程是默認優先以CPU占比排序(高到低),之后是按照PID的順序排列。top作為一個命令是支持選項的。 如:-d # 表示進入管理界面,指定管理界面的動態刷新時間為 # 秒。-b 選項要求顯示所有的進程。 -n # 指定進入top后達到刷新次數后自動退出top。
6、htop
官方網站:http://htop.sourceforge.net/? 。是 top 工具的升級版本 , 界面和top類似,但是操作和提示更加的人性化,若是終端支持鼠標(xshell或者secureCRT)也是可以使用鼠標點擊操作的。
選項: -d #: 指定延遲時間; -u UserName: 僅顯示指定用戶的進程 ;-s COLUME: 以指定字段進行排序 。
子命令: s: 跟蹤選定進程的系統調用, l: 顯示選定進程打開的文件列表, a:將選定的進程綁定至某指定CPU核心, t: 顯示進程樹 。
7、glances
glances 是一個非常全面的系統監控工具,包括用戶登陸、CPU占用、內存和swap占用、網卡速度、磁盤讀寫、磁盤掛載、進程管理等信息。
服務器模式: glances -s -B IPADDR IPADDR: 指明監聽的本機哪個地址
?客戶端模式: glances -c IPADDR IPADDR:要連入的服務器端地址
8、pmap
這個命令顯示的是進程對應的內存映射,使用方法:pmap [options] pid […] ,是通過PID 查詢進程對應內存的位置和對應文件。 例如 :對PID為1 的進程顯示內存映射,pmap -x? 1? 就可以了,? -x選項是指定顯示詳細格式的信息。這個命令是和一個對應文件相關的,比如 PID為 1 的進程對應的文件是? /proc/1/maps? ,用cat? 命令打開即可查詢到 pmap 命令相同的信息 。
9、vmstat
vmstat 是對虛擬內存(swap)數據進行實時顯示的工具,可以跟蹤顯示虛擬內存的信息。具體的用法如:vmstat [options] [delay [count]] ,選項的使用,我們可以通過 vmstat –help 命令顯示,delay是指定每次顯示間隔的秒數,count則指定跟蹤顯示的次數。例如:
procs: ? ? ? r:可運行(正運行或等待運行)進程的個數,和核心數有關 ?? ;? b:處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度) ? 。
memory: ?? swpd: 交換內存的使用總量 ?? ; ?? free:空閑物理內存總量 ; ? ?? buffer:用于buffer的內存總量 ? ; ? cache:用于cache的內存總量 ?。
swap: ? ? ? si:從磁盤交換進內存的數據速率(kb/s); ? ? ?? so:從內存交換至磁盤的數據速率(kb/s) 。
io: ?? bi:從塊設備讀入數據到系統的速率(kb/s) ? ; ? bo: 保存數據至塊設備的速率 ? ? ?? 。
system: in: interrupts 中斷速率,包括時鐘 ?? ; cs: context switch 進程切換速率 ?。
cpu:? us:Time spent running non-kernel code? 運行非內核代碼所用的時間; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sy: Time spent running kernel code 運行內核代碼所用的時間? ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id: Time spent idle ?? 空閑時間. Linux 2.5.41前,包括IO-wait time. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wa: Time spent waiting for IO? 等待 IO 所用的時間. 2.5.41前,包括in idle. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? st: Time stolen from a virtual machine ? 從虛擬機中竊取的時間. 2.6.11前, unknown.
10、dstat
11、kill
kill命令: 向進程發送控制信號,以實現對進程管理,每個信號對應一個數字,信號名稱以SIG開頭(可省略),不區分大小寫 。
顯示當前系統可用信號: kill –l? , ?? trap -l ? ;
常用信號:man 7 signal
1) SIGHUP: 無須關閉進程而讓其重讀配置文件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2) SIGINT: 中止正在運行的進程;相當于Ctrl+c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3) SIGQUIT:相當于ctrl+\ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 9) SIGKILL: 強制殺死正在運行的進程 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 15) SIGTERM:終止正在運行的進程 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 18) SIGCONT:繼續運行 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 19) SIGSTOP:后臺休眠
指定信號的方法: (1) 信號的數字標識:1, 2, 9 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? (2) 信號完整名稱:SIGHUP ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? (3) 信號的簡寫名稱:HUP
按PID: kill [-SIGNAL] pid … kill –n SIGNAL pid; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? kill –s SIGNAL pid ?
按名稱:killall [-SIGNAL] comm… ?
注意:kill 和 killall 都可用 -0 信號,用于檢測進程是否正常運行。
12、pkill
按模式:pkill [options] pattern ? (用戶名,進程編號,終端號)
-SIGNAL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -u uid: effective user,生效者 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -U uid: real user,真正發起運行命令者 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -t terminal: 與指定終端相關的進程 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -l: 顯示進程名(pgrep可用) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -a: 顯示完整格式的進程名(pgrep可用) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -P pid: 顯示指定進程的子進程
13、jobs
當我們在開啟一個進程時,有時會按 ctrl+z? 鍵,將運行的任務進程放入后臺,但是這個時候,進程狀態的變更為 stop,我們也可用使用 “command &”這個語法,讓任務進程進入后臺并保持運行。有些命令在后臺運行,我們的字符界面是無法看到運行狀態的,這個情況下,我們可以使用 jobs 這個命令,獲取到當前后臺進程的相關信息。
jobs 命令顯示的信息中,每個進程的開頭都添加了編號,這就方便我們管理和查詢后臺進程了。有了jobs 進程編號,我們可以使用 kill? [jobs編號],將對應的后臺進程終止。
bg? 命令功能是讓送往后臺的進程任務在后臺繼續運行??梢蕴砑雍笈_進程jobs編號進行控制
fg ? 命令功能是將后臺的進程任務調回前臺保持運行,后臺停止的進程會重新在前臺運行。
14、nohup、
后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉 后臺作業。如果希望送往后臺后,剝離與終端的關系就需要用到 nohup 這個命令,具體的用法是: nohup COMMAND &>/dev/null & 。
和 nohup 命令功能類似的還有 screen 命令,這個是先開啟一個獨立的運行環境窗口,之后再這個窗口中運行相應的命令和進程,用法是: ? screen;COMMAND? 。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90151