對于進(jìn)程管理工具平時大多用的是ps,kill,top,sleep等等這些命令,平時linux的一些指令我都會做一些記錄,本著好記性不如爛博客的精神,也把進(jìn)程管理的命令做一點系統(tǒng)性的記錄,參考資料基本是鳥哥還有網(wǎng)上的一些文章。
ps
ps命令主要是查看系統(tǒng)進(jìn)程的狀態(tài),平時最常用的命令是ps aux,然后再使用管道導(dǎo)向到grep查找特定的進(jìn)程,然后進(jìn)此特定進(jìn)程進(jìn)行操作。
要對進(jìn)程進(jìn)行操作必須先了解到當(dāng)前進(jìn)程的情況,ps命令體現(xiàn)了現(xiàn)實當(dāng)前運行進(jìn)程的快照,ps和top和相似,但ps提供了更多的信息,可以確定哪些進(jìn)程正在運行,哪些進(jìn)程被掛起,運行了多長時間,以及進(jìn)行使用的資源和進(jìn)程的優(yōu)先級,這些信息對我們都有很重要的作用,當(dāng)我們使用ps aux可以獲得終端所有用戶的有關(guān)進(jìn)程信息。

逐列記錄:
USER 表示啟動進(jìn)程的用戶
PID 表示進(jìn)程標(biāo)志號
%CPU 表示該進(jìn)程占用CPU的時間和進(jìn)程總運行時間比例
%MEM 表示該進(jìn)程占用內(nèi)存的時間和進(jìn)程總運行時間比例
VSZ 表示占用虛擬內(nèi)存的大小
RSS 表示占用物理內(nèi)存的大小
TTY 表示對應(yīng)的終端號,其中“?”表示不占用終端
STAT 表示進(jìn)程的幾種運行狀態(tài),D:不可中斷uninterruptible sleep;R:運行runnable;S:睡眠sleeping ;T:停止traced or stopped;Z:僵死a defunct (”zombie”) process;W:沒有足夠的內(nèi)存進(jìn)行分配;<:高優(yōu)先序的進(jìn)程;N:低優(yōu)先序的進(jìn)程;L:實時系統(tǒng)或I/O
START 表示開始時間
TIME 表示運行了多少時間
COMMAND表示所執(zhí)行的指令
分享一些常用的ps指令
查看chenyz用戶名所運行的進(jìn)程
root@tech163:/home/chenyz# ps -U chenyz -u chenyz u
查看nginx的進(jìn)程
root@tech163:/home/chenyz# ps aux | grep nginx
查看使用內(nèi)存最多的前10個進(jìn)程
root@tech163:/home/chenyz# ps auxf | sort -nr -k 4 | head -10
查看使用CPU最多的前10個進(jìn)程
root@tech163:/home/chenyz# ps auxf | sort -nr -k 3 | head -10
pstree
ps能夠得到精確的數(shù)據(jù),但是數(shù)據(jù)龐大,這對于掌握系統(tǒng)整體的概括來說不是很容易。pstree剛好可以彌補(bǔ)這個缺憾,進(jìn)程啟動的時候可能會產(chǎn)生自己的一個子進(jìn)程,使用pstree就能夠?qū)?dāng)前的程序以樹形結(jié)構(gòu)呈現(xiàn)。

kill
kill的工作原理是:想linux系統(tǒng)的內(nèi)核發(fā)送一個系統(tǒng)操作信號和某個程序的進(jìn)程標(biāo)識號,然后系統(tǒng)內(nèi)核就可以對進(jìn)程標(biāo)識號指定的進(jìn)程進(jìn)行操作,當(dāng)需要終端一個前臺進(jìn)程的時候,可以使用ctrl+C進(jìn)行結(jié)束,但對于一個后臺進(jìn)程,一個組合鍵是無法進(jìn)行中斷的,這個時候就必須使用kill命令。
當(dāng)我們啟動一個后端程序
root@tech163:/home/chenyz# nohup ./hello.sh &
[1] 15100
可以使用ps來查看該進(jìn)程
root@tech163:/home/chenyz# ps aux | grep hello
root 15100 0.0 0.0 1840 540 pts/0 S 14:57 0:00 /bin/sh ./hello.sh
使用kill %1 或者 kill 15100 來終止該進(jìn)程。
如果一個程序已經(jīng)徹底死掉,如果kill pid也沒法終止,則需要加上信號強(qiáng)度,最好的辦法是加上信號強(qiáng)度 -9 直接殺死父進(jìn)程。
跟kill相關(guān)的還有killall,killall通過程序名來直接殺死所有進(jìn)程。
top
與ps提供的快照不同的是,top提供了一個當(dāng)前運行系統(tǒng)實時動態(tài)的視圖,也就是正在運行的進(jìn)程,在默認(rèn)情況下,顯示系統(tǒng)中CPU使用率最高的任務(wù),并每5秒刷新一次。

第一行顯示了當(dāng)前時間,登錄的用戶數(shù),平均負(fù)載
第二行顯示了所有進(jìn)程數(shù),運行(running),掛起(sleeping),停止(stopped),無用(zombie)的進(jìn)程數(shù)
第三行顯示了CPU的使用情況,用戶占得百分比,系統(tǒng)占得百分比,空閑的百分比
第四行顯示了物理內(nèi)存的使用情況,包括可以使用內(nèi)存,已使用內(nèi)存,空閑內(nèi)存,緩沖區(qū)內(nèi)存
第五行顯示了交換區(qū)的使用情況,包括了總的交換區(qū),使用的,空閑的,用于高速緩存的交換區(qū)
第六行重啟一段再解釋
PID 表示進(jìn)程標(biāo)識號
USER 表示該進(jìn)程的用戶名
PR 表示進(jìn)程的優(yōu)先級
NI 表示進(jìn)程的優(yōu)先級別數(shù)值
VIRT 表示進(jìn)程占用的虛擬內(nèi)存
RES 表示進(jìn)程占用的物理內(nèi)存
SHR 表示進(jìn)程使用的共享內(nèi)存值
S 表示進(jìn)程的狀態(tài),運行(running),掛起(sleeping),停止(stopped),無用(zombie)
%CPU 表示占用CPU的使用率
%MEM 表示占用物理內(nèi)存的使用率
TIME+ 表示該進(jìn)程占用CPU的總時間
COMMAND 表示進(jìn)程的命名名稱
top是功能非常強(qiáng)大的監(jiān)控系統(tǒng),但是它的缺點是消耗很多的系統(tǒng)資源,在系統(tǒng)負(fù)載過高的時候查看進(jìn)程盡量避免使用top。
jobs
如果你想知道有多少進(jìn)程在后臺運行中,那就用jobs的指令吧,如果想知道進(jìn)程的pid那就是用job -l
先使一個進(jìn)程運行在后臺
root@tech163:/home/chenyz#./hello.sh &
[1] 17299
root@tech163:/home/chenyz# jobs -l
[1]+ 17299 Running ./hello.sh &
因為當(dāng)前只有一個后臺任務(wù)在運行,所以后臺任務(wù)的號碼是[1],如果有第二個任務(wù)進(jìn)入后端執(zhí)行,那么[1]會跟著動態(tài)變化。
fg
剛剛我們將./hello.sh &進(jìn)程放入后端執(zhí)行,如果想要將后端的進(jìn)程拿到前端來可以使用fg來處理
root@tech163:/home/chenyz# jobs -l
[1]+ 17299 Running
root@tech163:/home/chenyz# fg %1
./hello.sh
bg
與fg相反的是bg,如果想看到后端程序的運行情況,可以使用fg命令把它調(diào)到前臺,,bg可以使得多個進(jìn)程放到后臺中執(zhí)行。
啟動一個進(jìn)程,然后使用ctrl+z暫停,然后使用bg將該進(jìn)程放入后臺執(zhí)行
root@tech163:/home/chenyz# ./hello.sh
^Z //{ctrl+z}暫停
[1]+ Stopped ./hello.sh
root@tech163:/home/chenyz# jobs;bg %1
[1]+ Stopped ./hello.sh
[1]+ ./hello.sh &
root@tech163:/home/chenyz# jobs
[1]+ Running ./hello.sh &
跟進(jìn)程管理相關(guān)的命令還有很多如nohup,sleep,nice,renice...后續(xù)再記錄
ps
ps命令主要是查看系統(tǒng)進(jìn)程的狀態(tài),平時最常用的命令是ps aux,然后再使用管道導(dǎo)向到grep查找特定的進(jìn)程,然后進(jìn)此特定進(jìn)程進(jìn)行操作。
要對進(jìn)程進(jìn)行操作必須先了解到當(dāng)前進(jìn)程的情況,ps命令體現(xiàn)了現(xiàn)實當(dāng)前運行進(jìn)程的快照,ps和top和相似,但ps提供了更多的信息,可以確定哪些進(jìn)程正在運行,哪些進(jìn)程被掛起,運行了多長時間,以及進(jìn)行使用的資源和進(jìn)程的優(yōu)先級,這些信息對我們都有很重要的作用,當(dāng)我們使用ps aux可以獲得終端所有用戶的有關(guān)進(jìn)程信息。

逐列記錄:
USER 表示啟動進(jìn)程的用戶
PID 表示進(jìn)程標(biāo)志號
%CPU 表示該進(jìn)程占用CPU的時間和進(jìn)程總運行時間比例
%MEM 表示該進(jìn)程占用內(nèi)存的時間和進(jìn)程總運行時間比例
VSZ 表示占用虛擬內(nèi)存的大小
RSS 表示占用物理內(nèi)存的大小
TTY 表示對應(yīng)的終端號,其中“?”表示不占用終端
STAT 表示進(jìn)程的幾種運行狀態(tài),D:不可中斷uninterruptible sleep;R:運行runnable;S:睡眠sleeping ;T:停止traced or stopped;Z:僵死a defunct (”zombie”) process;W:沒有足夠的內(nèi)存進(jìn)行分配;<:高優(yōu)先序的進(jìn)程;N:低優(yōu)先序的進(jìn)程;L:實時系統(tǒng)或I/O
START 表示開始時間
TIME 表示運行了多少時間
COMMAND表示所執(zhí)行的指令
分享一些常用的ps指令
查看chenyz用戶名所運行的進(jìn)程
root@tech163:/home/chenyz# ps -U chenyz -u chenyz u
查看nginx的進(jìn)程
root@tech163:/home/chenyz# ps aux | grep nginx
查看使用內(nèi)存最多的前10個進(jìn)程
root@tech163:/home/chenyz# ps auxf | sort -nr -k 4 | head -10
查看使用CPU最多的前10個進(jìn)程
root@tech163:/home/chenyz# ps auxf | sort -nr -k 3 | head -10
pstree
ps能夠得到精確的數(shù)據(jù),但是數(shù)據(jù)龐大,這對于掌握系統(tǒng)整體的概括來說不是很容易。pstree剛好可以彌補(bǔ)這個缺憾,進(jìn)程啟動的時候可能會產(chǎn)生自己的一個子進(jìn)程,使用pstree就能夠?qū)?dāng)前的程序以樹形結(jié)構(gòu)呈現(xiàn)。

kill
kill的工作原理是:想linux系統(tǒng)的內(nèi)核發(fā)送一個系統(tǒng)操作信號和某個程序的進(jìn)程標(biāo)識號,然后系統(tǒng)內(nèi)核就可以對進(jìn)程標(biāo)識號指定的進(jìn)程進(jìn)行操作,當(dāng)需要終端一個前臺進(jìn)程的時候,可以使用ctrl+C進(jìn)行結(jié)束,但對于一個后臺進(jìn)程,一個組合鍵是無法進(jìn)行中斷的,這個時候就必須使用kill命令。
當(dāng)我們啟動一個后端程序
root@tech163:/home/chenyz# nohup ./hello.sh &
[1] 15100
可以使用ps來查看該進(jìn)程
root@tech163:/home/chenyz# ps aux | grep hello
root 15100 0.0 0.0 1840 540 pts/0 S 14:57 0:00 /bin/sh ./hello.sh
使用kill %1 或者 kill 15100 來終止該進(jìn)程。
如果一個程序已經(jīng)徹底死掉,如果kill pid也沒法終止,則需要加上信號強(qiáng)度,最好的辦法是加上信號強(qiáng)度 -9 直接殺死父進(jìn)程。
跟kill相關(guān)的還有killall,killall通過程序名來直接殺死所有進(jìn)程。
top
與ps提供的快照不同的是,top提供了一個當(dāng)前運行系統(tǒng)實時動態(tài)的視圖,也就是正在運行的進(jìn)程,在默認(rèn)情況下,顯示系統(tǒng)中CPU使用率最高的任務(wù),并每5秒刷新一次。

第一行顯示了當(dāng)前時間,登錄的用戶數(shù),平均負(fù)載
第二行顯示了所有進(jìn)程數(shù),運行(running),掛起(sleeping),停止(stopped),無用(zombie)的進(jìn)程數(shù)
第三行顯示了CPU的使用情況,用戶占得百分比,系統(tǒng)占得百分比,空閑的百分比
第四行顯示了物理內(nèi)存的使用情況,包括可以使用內(nèi)存,已使用內(nèi)存,空閑內(nèi)存,緩沖區(qū)內(nèi)存
第五行顯示了交換區(qū)的使用情況,包括了總的交換區(qū),使用的,空閑的,用于高速緩存的交換區(qū)
第六行重啟一段再解釋
PID 表示進(jìn)程標(biāo)識號
USER 表示該進(jìn)程的用戶名
PR 表示進(jìn)程的優(yōu)先級
NI 表示進(jìn)程的優(yōu)先級別數(shù)值
VIRT 表示進(jìn)程占用的虛擬內(nèi)存
RES 表示進(jìn)程占用的物理內(nèi)存
SHR 表示進(jìn)程使用的共享內(nèi)存值
S 表示進(jìn)程的狀態(tài),運行(running),掛起(sleeping),停止(stopped),無用(zombie)
%CPU 表示占用CPU的使用率
%MEM 表示占用物理內(nèi)存的使用率
TIME+ 表示該進(jìn)程占用CPU的總時間
COMMAND 表示進(jìn)程的命名名稱
top是功能非常強(qiáng)大的監(jiān)控系統(tǒng),但是它的缺點是消耗很多的系統(tǒng)資源,在系統(tǒng)負(fù)載過高的時候查看進(jìn)程盡量避免使用top。
jobs
如果你想知道有多少進(jìn)程在后臺運行中,那就用jobs的指令吧,如果想知道進(jìn)程的pid那就是用job -l
先使一個進(jìn)程運行在后臺
root@tech163:/home/chenyz#./hello.sh &
[1] 17299
root@tech163:/home/chenyz# jobs -l
[1]+ 17299 Running ./hello.sh &
因為當(dāng)前只有一個后臺任務(wù)在運行,所以后臺任務(wù)的號碼是[1],如果有第二個任務(wù)進(jìn)入后端執(zhí)行,那么[1]會跟著動態(tài)變化。
fg
剛剛我們將./hello.sh &進(jìn)程放入后端執(zhí)行,如果想要將后端的進(jìn)程拿到前端來可以使用fg來處理
root@tech163:/home/chenyz# jobs -l
[1]+ 17299 Running
root@tech163:/home/chenyz# fg %1
./hello.sh
bg
與fg相反的是bg,如果想看到后端程序的運行情況,可以使用fg命令把它調(diào)到前臺,,bg可以使得多個進(jìn)程放到后臺中執(zhí)行。
啟動一個進(jìn)程,然后使用ctrl+z暫停,然后使用bg將該進(jìn)程放入后臺執(zhí)行
root@tech163:/home/chenyz# ./hello.sh
^Z //{ctrl+z}暫停
[1]+ Stopped ./hello.sh
root@tech163:/home/chenyz# jobs;bg %1
[1]+ Stopped ./hello.sh
[1]+ ./hello.sh &
root@tech163:/home/chenyz# jobs
[1]+ Running ./hello.sh &
跟進(jìn)程管理相關(guān)的命令還有很多如nohup,sleep,nice,renice...后續(xù)再記錄