在linux每執(zhí)行一個二進制文件都會產(chǎn)生一個進程并生成一個進程PID。進程除了自身的ID外,還有父進程ID(ppid),所有進程的祖先進程是同一個進程,它叫做init進程,PID為1。
當用戶從一個終端登陸時,便獲得一個此次執(zhí)行的bash進程的PID。用戶執(zhí)行的每一條指令都是這個PID的子進程。
linux通過fork-and-exec的流程來產(chǎn)生子進程:首先會通過父進程以復制 (fork) 的方式產(chǎn)生一個一模一樣的子進程, 然后被復制出來的子進程再以 exec 的方式來運行實際要進行的程序,最終就成為一個子進程的存在。
僵尸進程:當該程序應該已經(jīng)運行完畢,或者是因故應該要終止了,但是該程序的父程序卻無法完整的將該程序結束掉,而造成那個程序一直存在內存當中,形成僵尸進程。
進程后臺運行與暫停
通過在命令結尾加上&,可以時命令在后臺運行而不影響前臺。
通過[ctrl]-z可以將前臺正在運行的進程暫停。
jobs
查看當前后臺工作狀態(tài):
選項與參數(shù):
-l :除了列出 job number 與命令串之外,同時列出 PID 的號碼;
-r :僅列出正在背景 run 的工作;
-s :僅列出正在背景當中暫停 (stop) 的工作。[zsp@sky]~$ vim a
[1]+ 已停止 vim a
[zsp@sky]~$ vim b
[2]+ 已停止 vim b
[zsp@sky]~$ jobs
[1]- 已停止 vim a
[2]+ 已停止 vim b
那個+代表最近一個被暫停到后臺的工作,且當執(zhí)行fg命令時在后臺下默認會被取用的那個工作。-代表最近最后第二個被暫停到后臺中的工作號碼
fg
將后臺的工作拿出來處理
%可以指定處理哪一個后臺任務
[zsp@sky]~$ fg
vim b
[2]+ 已停止 vim b
[zsp@sky]~$ jobs
[1]- 已停止 vim a
[2]+ 已停止 vim b
[zsp@sky]~$ fg %1
vim a
[1]+ 已停止 vim a
[zsp@sky]~$ jobs
[1]+ 已停止 vim a
[2]- 已停止 vim b
bg
讓一個被暫停的任務在后臺繼續(xù)運行
kill
停止或重啟后臺任務
-l :這個是 L 的小寫,列出目前 kill 能夠使用的訊號 (signal) 有哪些?
-1 :重新讀取一次參數(shù)的配置文件,啟動被終止的進程;
-2 :代表與由鍵盤輸入 [ctrl]-c 同樣的動作;
-9 :立刻強制刪除一個工作;
-15:以正常的程序方式終止一項工作。與 -9 是不一樣的。
nohup
脫機執(zhí)行后臺進程
當后臺任務正在執(zhí)行時,若注銷登錄,那么任務也將停止??梢允褂胣ohup來使任務在注銷后繼續(xù)執(zhí)行。
nohup [命令與參數(shù)] &
ps
將某個時間點的進程運行情況列下來
選項與參數(shù):
-A :所有的 process 均顯示出來,與 -e 具有同樣的效用;
-a :不與 terminal 有關的所有 process ;
-u :有效使用者 (effective user) 相關的 process ;
x :通常與 a 這個參數(shù)一起使用,可列出較完整資訊。
輸出格式規(guī)劃:
l :較長、較詳細的將該 PID 的的資訊列出;
j :工作的格式 (jobs format)
-f :做一個更為完整的輸出。
常用:
ps aux 列出系統(tǒng)所有的程序數(shù)據(jù)
ps -l 僅列出自己 bash 程序[zsp@sky]~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1955 1948 0 80 0 - 6086 wait pts/0 00:00:00 bash
0 R 1000 2917 1955 0 80 0 - 2530 - pts/0 00:00:00 ps
從左到右各個字段意思
F:代表這個程序標志,說明這個程序的權限,常見號碼有:
若為 4 表示此程序的權限為 root ;
若為 1 則表示此子程序僅進行復制(fork)而沒有實際運行(exec)。
S:代表這個程序的狀態(tài) (STAT),主要的狀態(tài)有:
R (Running):該程序正在運行中;
S (Sleep):該程序目前正在睡眠狀態(tài)(idle),但可以被喚醒(signal)。
D :不可被喚醒的睡眠狀態(tài),通常這支程序可能在等待 I/O 的情況(ex>列印)
T :停止狀態(tài)(stop),可能是在工作控制(背景暫停)或除錯 (traced) 狀態(tài);
Z (Zombie):僵尸狀態(tài),程序已經(jīng)終止但卻無法被移除至內存外。
UID/PID/PPID:代表此程序被該 UID 所擁有/程序的 PID 號碼/此程序的父程序 PID 號碼』
C:代表 CPU 使用率,單位為百分比;
PRI/NI:Priority/Nice 的縮寫,代表此程序被 CPU 所運行的優(yōu)先順序,數(shù)值越小代表該程序越快被 CPU 運行。
ADDR/SZ/WCHAN:都與內存有關,ADDR 是 kernel function,指出該程序在內存的哪個部分,如果是個 running 的程序,一般就會顯示-/ SZ 代表此程序用掉多少內存 / WCHAN 表示目前程序是否運行中,同樣的, 若為 - 表示正在運行中。
TTY:登陸者的終端機位置,若為遠程登陸則使用動態(tài)終端介面 (pts/n);
TIME:使用掉的 CPU 時間,注意,是此程序實際花費 CPU 運行的時間,而不是系統(tǒng)時間;
CMD:就是 command 的縮寫,造成此程序的觸發(fā)程序之命令為何。[zsp@sky]~$ ps aux | head -n 2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 24440 2416 ? Ss 16:19 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 16:19 0:00 [kthreadd]
從左到右各個字段意思
USER:該 process 屬於那個使用者帳號的?
PID :該 process 的程序識別碼。
%CPU:該 process 使用掉的 CPU 資源百分比;
%MEM:該 process 所占用的實體內存百分比;
VSZ :該 process 使用掉的虛擬內存量 (Kbytes)
RSS :該 process 占用的固定的內存量 (Kbytes)