進程(Process)是一個程序在其自身的虛擬地址空間中的一次執行活動。之所以要創建進程,就是爲了使多個程序可以併發的執行,從而提高系統的資源利用率和吞吐量。
程序只是一個靜態的指令集合;而進程是一個程序的動態執行過程,它具有生命期,是動態的產生和消亡的。
進程家族
引導系統時,Linux內核的一個職責是啓動第一個進程(通常是/sbin/init)。因爲一個頁已存在的進程繼續派生,所有其他進程得以啓動。
如何終止進程
當進程終止時,可能是通過選擇退出(exit)正常終止,也可以是因爲接收到信號而非正常終止。
孤兒進程。
如果說處理子進程終止後的善後事宜是父進程的職責的話,那麼如果父進程在子進程之前終止該怎麼辦?這個子進程就變成了孤兒進程。
殭屍進程
當進程退出,釋放大多數資源和它的父進程收集它的返回值、釋放剩餘資源這兩段時間之間,子進程處於一個特殊狀態,被稱爲殭屍進程(zombie)。每個進程都會經過一個短暫的殭屍狀態。
五種進程狀態:
可運行(R)
處於可運行狀態的進程,一旦有機會,就會訪問CPU。多個進程可以(而且經常)處於可以運行狀態,但是因爲在任何給定時間內只有一個進程可以在CPU上運行,所以實際上這些進程中只有一個在任何給定的實例上運行。
自願(可中斷的)睡眠(s)
從名稱中可以看出,處於自願睡眠狀態的進程選擇處於該狀態。通常,這一進程在某事發生之前無事可做。
非自願(不可中斷或強制)睡眠
內核迫使進程進入非自願睡眠狀態。該進程並沒有選擇休眠,它情願運行以便做完事情。當資源被釋放時,內核會喚醒進程並將設置爲可運行狀態。
停止的(掛起的)進程(T)
用戶有時決定掛起進程,被掛起的進程在被用戶重新啓動前不會執行任何操作。
殭屍進程(Z)
每個快要終止的進程會經歷一個短暫的殭屍狀態,然而有時有些進程會一直停留在殭屍狀態。
進程優先級:
實時優先級(1,99數字越大,優先級越高)
用戶優先級(100-139數字越小,優先級越高)(-20,19)
調整優先級:
nice
[root@localhost libvirt]# nice -n -21 ping -c 500 localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.259 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.072 ms
查看優先級(NI):
[root@localhost 桌面]# ps -lef | awk '$0~/[p]ing/||NR==1' F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 28787 3118 0 60 -20 - 26337 skb_re 14:09 pts/0 00:00:00 ping -c 500 localhost
renice
[root@localhost 桌面]# renice 19 -u root -p 28935 0: old priority -20, new priority 19 28935: old priority 19, new priority 19 [root@localhost 桌面]# ps -lef | awk '$0~/[p]ing/||NR==1' F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 28935 3118 0 99 19 - 26337 skb_re 14:16 pts/0 00:00:00 ping -c 500 localhost
chrt
[root@localhost 桌面]# ps -lef | awk '$0~/[p]ing/||NR==1' F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 29056 3118 0 78 -2 - 26337 skb_re 14:24 pts/0 00:00:00 ping -c 500 localhost [root@localhost 桌面]# chrt -p -f 1 29056 [root@localhost 桌面]# ps -lef | awk '$0~/[p]ing/||NR==1' F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 29056 3118 0 58 - - 26337 skb_re 14:24 pts/0 00:00:00 ping -c 500 localhost
chrt -p 指定PID
-r set policy to SCHED_RR (default)
-f set policy to SCHED_FF
使用vmstat查看進程相關信息:
[root@localhost 桌面]# vmstat 1 5 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 502596 25676 187264 0 0 211 8 83 164 2 2 93 3 0 0 0 0 502580 25676 187264 0 0 0 0 51 93 0 0 100 0 0 1 0 0 502580 25676 187264 0 0 0 0 53 100 1 0 99 0 0 0 0 0 502580 25684 187260 0 0 0 20 40 78 0 1 99 0 0 0 0 0 502580 25684 187264 0 0 0 0 53 109 0 1 99 0 0
procs
r: 等待運行的進程數
b: 處在非中斷睡眠狀態的進程數
w: 被交換出去的可運行的進程數。此數由 linux 計算得出,但 linux 並不耗盡交換空間
硬中斷:是由與系統相連的外設(比如:網卡、硬盤)自動產生的。主要是用來通知操作系統外設狀態的變化。比如當網卡收到數據包的時候,就會發出一箇中斷。
軟中斷:我們知道,爲了滿足實時系統的要求,中斷處理應該是越快越好。linux爲了實現這個特點,當中斷髮生的時候,硬中斷處理那些短時間就可以完成的工作,而將那些處理時間比較長的工作,放到中斷之後來完成,也就是軟中斷中來完成。