linux進程管理

  進程(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爲了實現這個特點,當中斷髮生的時候,硬中斷處理那些短時間就可以完成的工作,而將那些處理時間比較長的工作,放到中斷之後來完成,也就是軟中斷中來完成。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章