真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux進(jìn)程管理

博文結(jié)構(gòu)
什么是程序
工作管理
程序管理

目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、掇刀網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

一.什么是程序

1.在 Linux 系統(tǒng)當(dāng)中: “ 觸發(fā)任何一個(gè)事件時(shí),系統(tǒng)都會(huì)將他定義成為一個(gè)程序,并且給予這個(gè)程序一個(gè) ID ,稱為 PID ,同時(shí)依據(jù)啟發(fā)這個(gè)程序的使用者與相關(guān)屬性關(guān)系,給予這個(gè) PID 一組有效的權(quán)限設(shè)置。

2.程序與進(jìn)程 ( process & program )

執(zhí)行一個(gè)程序或指令 ” 就可以觸發(fā)一個(gè)事件而取得一個(gè) PID 啰!我們說過,系統(tǒng)應(yīng)該是僅認(rèn)識(shí) binary file 的,那么當(dāng)我們要讓系統(tǒng)工作的時(shí)候,當(dāng)然就是需要啟動(dòng)一個(gè) binary file ,那個(gè) binary file 就是程序 ( program )

Linux進(jìn)程管理

如上圖所示,程序一般是放置在實(shí)體磁盤中,然后通過使用者的執(zhí)行來觸發(fā)。觸發(fā)后會(huì)載入到內(nèi)存中成為一個(gè)個(gè)體,那就是程序。 為了操作系統(tǒng)可管理這個(gè)程序,因此程序有給予執(zhí)行者的權(quán)限 / 屬性等參數(shù),并包括程序所需要的指令碼與數(shù)據(jù)或文件數(shù)據(jù)等, 最后再給予一個(gè) PID 。系統(tǒng)就是通過這個(gè) PID 來判斷該 process 是否具有權(quán)限進(jìn)行工作的

  • 程序 ( program ):通常為 binary program ,放置在儲(chǔ)存媒體中 (如硬盤、光盤、軟盤、磁帶等), 為實(shí)體文件的型態(tài)存在;

  • 進(jìn)程 ( process ):程序被觸發(fā)后,執(zhí)行者的權(quán)限與屬性、程序的程序碼與所需數(shù)據(jù)等都會(huì)被載入內(nèi)存中, 操作系統(tǒng)并給予這個(gè)內(nèi)存內(nèi)的單元一個(gè)識(shí)別碼 ( PID ),可以說,進(jìn)程就是一個(gè)正在運(yùn)行中的程序。

  • 子程序與父程序:程序彼此之間是有相關(guān)性的!以上面的圖示來看,連續(xù)執(zhí)行兩個(gè) bash 后,第二個(gè) bash的父程序就是前一個(gè) bash 。因?yàn)槊總€(gè)程序都有一個(gè) PID ,那某個(gè)程序的父程序該如何判斷?就通過 Parent PID( PPID )來判斷即可。
    Linux進(jìn)程管理

  • fork and exec :程序調(diào)用的流程
    其實(shí)子程序與父程序之間的關(guān)系還挺復(fù)雜的,最大的復(fù)雜點(diǎn)在于程序互相之間的調(diào)用。在 Linux 的程序調(diào)用通常稱為 fork-and-exec 的流程程序都會(huì)借由父程序以復(fù)制 ( fork )的方式產(chǎn)生一個(gè)一模一樣的子程序, 然后被復(fù)制出來的子程序再以 exec的方式來執(zhí)行實(shí)際要進(jìn)行的程序,最終就成為一個(gè)子程序的存在。

如圖:

Linux進(jìn)程管理

(1 )系統(tǒng)先以 fork 的方式復(fù)制一個(gè)與父程序相同的暫存程序,這個(gè)程序與父程序唯一的差別就是 PID 不同! 但是這個(gè)暫存程序還會(huì)多一個(gè) PPID 的參數(shù),PPID 如前所述,就是父程序的程序識(shí)別碼啦!然后
( 2 )暫存程序開始以 exec 的方式載入實(shí)際要執(zhí)行的程序,以上述圖示來講,新的程序名稱為 qqq ,最終子程序的程序碼就會(huì)變成 qqq 了!

二.工作管理

  • 這個(gè)工作管理 ( job control ) 是用在 bash 環(huán)境下的,也就是說: “ 當(dāng)我們登陸系統(tǒng)取得 bash shell 之后,在單一終端機(jī)接口下同時(shí)進(jìn)行多個(gè)工作的行為管理 ” 。舉例來說,我們?cè)诘顷?bash 后, 想要一邊復(fù)制文件、一邊進(jìn)行數(shù)據(jù)搜尋、一邊進(jìn)行編譯,還可以一邊進(jìn)行 vim 程序撰寫! 當(dāng)然我們可以重復(fù)登陸那六個(gè)命令行的終端機(jī)環(huán)境中

  • 要進(jìn)行 bash 的工作管理必須要注意到的限制是:

這些工作所觸發(fā)的程序必須來自于你 shell 的子程序(只管理自己的 bash );
前景:你可以控制與下達(dá)指令的這個(gè)環(huán)境稱為前景的工作 ( foreground );
背景:可以自行運(yùn)行的工作,你無法使用 [ctrl]+c 終止他,可使用 bg/fg 調(diào)用該工作;
背景中 “ 執(zhí)行 ” 的程序不能等待 terminal(終端)/shell 的輸入( input )

例如:可以隱藏執(zhí)行程序

[root@localhost ~]# tar -zpcf /tmp/etc.tar.gz /etc/&
[1] 3433            \\PID
  • 觀察目前的背景工作狀態(tài): jobs
[root@localhost ~]# jobs
參數(shù)如下:
-l : 除了列出job number與指令串之外,還列出PID
-r :   僅列出正在背景run的工作
- s :僅列出正在背景當(dāng)中暫停(stop)  的工作
[root@localhost ~]# jobs -l
[1]-  3516 停止                  vim aaa
[2]+  3520 停止                  vim abbb
  • 將背景工作拿到前景來處理: fg
[root@localhost ~]# fg %1

選項(xiàng)與參數(shù):
%jobnumber : jobnumber為工作號(hào)碼(數(shù)字),注意,那個(gè)%是可有可無的
  • 讓工作在背景下的狀態(tài)變成運(yùn)行中: bg

舉例:執(zhí)行如下命令后,立刻丟掉背景去工作

[root@localhost ~]# find / -perm /7000 > /tmp/test.txt     \\查詢過程中按下ctrl+z暫停
find: ‘/proc/3585/task/3585/fd/6’: 沒有那個(gè)文件或目錄
find: ‘/proc/3585/task/3585/fdinfo/6’: 沒有那個(gè)文件或目錄
find: ‘/proc/3585/fd/6’: 沒有那個(gè)文件或目錄
find: ‘/proc/3585/fdinfo/6’: 沒有那個(gè)文件或目錄
[3]+  已停止               find / -perm /7000 > /tmp/test.txt
[root@localhost ~]# jobs   \\查看一下
[1]-  已停止               vim aaa
[2]   已停止               vim abbb
[3]+  已停止               find / -perm /7000 > /tmp/test.txt
  • 管理背景當(dāng)中的工作: kill
[root@localhost ~]# kill -signal %jobnumber    \\命令格式
[root@localhost ~]# kill -l
選項(xiàng)與參數(shù)
-l :這個(gè)是L的小寫,列出目前kill能夠使用的訊號(hào)有哪些
signal :代表給與后面接的那個(gè)工作什么樣的指示
-1 : 重新讀取一次參數(shù)的配置文件類似(reload)
-2 : 代表與由鍵盤輸入【ctrl】-c同樣的動(dòng)作
-9 : 立刻強(qiáng)制刪除一個(gè)工作
-15 : 以正常的程序方式終止一項(xiàng)工作,與-9不一樣
例如:
[root@localhost ~]# kill -9 %2
[2]   已殺死               vim abbb
  • ps :將某個(gè)時(shí)間點(diǎn)的程序運(yùn)行情況擷取下來
[root@localhost ~]# ps aux     \\觀察系統(tǒng)所有的程序數(shù)據(jù)
[root@localhost ~]# ps -lA       \\也是能夠觀察所有系統(tǒng)數(shù)據(jù)
[root@localhost ~]# ps axjf       \\連同部分程序樹狀態(tài)
選項(xiàng)與參數(shù):
-A :所有的process :均顯示出來,與-e具有同樣的效用;
-a :不與terminal 有關(guān)的所有process ;
-u :有效使用者( effective user)相關(guān)的process ;
-x:通常與a這個(gè)參數(shù)一起使用,可列出較完整信息。
輸出長格式規(guī)則:
1 :較長、較詳細(xì)的將該P(yáng)ID的的信息列出;
j :工作的格式( jobs format )
-f:做一個(gè)更為完整的輸出。0
  • 僅觀察自己的 bash 相關(guān)程序: ps -l
[root@localhost ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   3373   3368  0  80   0 - 29191 wait   pts/0    00:00:00 bash
4 T     0   3516   3373  0  80   0 - 37936 signal pts/0    00:00:00 vim
4 T     0   3585   3373  0  80   0 - 30320 signal pts/0    00:00:00 find
0 R     0   3852   3373  0  80   0 - 37233 -      pts/0    00:00:00 ps

F :代表這個(gè)程序旗標(biāo) ( process flags ),說明這個(gè)程序的總結(jié)權(quán)限,常見號(hào)碼有:
若為 4 表示此程序的權(quán)限為 root ;
若為 1 則表示此子程序僅進(jìn)行復(fù)制( fork )而沒有實(shí)際執(zhí)行( exec )。
S :代表這個(gè)程序的狀態(tài) ( STAT ),主要的狀態(tài)有:
R( Running ):該程序正在運(yùn)行中;
S( Sleep ):該程序目前正在睡眠狀態(tài)( idle ),但可以被喚醒( signal )。
D:不可被喚醒的睡眠狀態(tài),通常這支程序可能在等待 I/O 的情況( ex> 打印)
T:停止?fàn)顟B(tài)( stop ),可能是在工作控制(背景暫停)或除錯(cuò) ( traced ) 狀態(tài);
Z( Zombie ):僵尸狀態(tài),程序已經(jīng)終止但卻無法被移除至內(nèi)存外。
UID/PID/PPID:代表 “ 此程序被該 UID 所擁有 / 程序的 PID 號(hào)碼 / 此程序的父程序 PID 號(hào)碼 ”
C:代表 CPU 使用率,單位為百分比;
PRI/NI: Priority/Nice 的縮寫,代表此程序被 CPU 所執(zhí)行的優(yōu)先順序,數(shù)值越小代表該程序越快被 CPU 執(zhí)行。詳細(xì)的 PRI與 NI 將在下一小節(jié)說明。
ADDR/SZ/WCHAN :都與內(nèi)存有關(guān), ADDR 是 kernel function 
TTY:登陸者的終端機(jī)位置,若為遠(yuǎn)端登陸則使用動(dòng)態(tài)終端接口 ( pts/n );
TIME:使用掉的 CPU 時(shí)間,注意,是此程序?qū)嶋H花費(fèi) CPU 運(yùn)行的時(shí)間,而不是系統(tǒng)時(shí)間;
CMD:就是 command 的縮寫,造成此程序的觸發(fā)程序之指令為何
  • 觀察系統(tǒng)所有程序: ps aux
[root@localhost ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 125288  3832 ?        Ss   21:36   0:01 /usr/lib/systemd/syst
root          2  0.0  0.0      0     0 ?        S    21:36   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    21:36   0:00 [ksoftirqd/0]
root          6  0.0  0.0      0     0 ?        S    21:36   0:00 [kworker/u256:0]
root          7  0.0  0.0      0     0 ?        S    21:36   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    21:36   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        R    21:36   0:00 [rcu_sched]
............................
USER :該 process 屬于那個(gè)使用者帳號(hào)的?
PID :該 process 的程序識(shí)別碼。
%CPU :該 process 使用掉的 CPU 資源百分比;
%MEM :該 process 所占用的實(shí)體內(nèi)存百分比;
VSZ :該 process 使用掉的虛擬內(nèi)存量 ( KBytes )
RSS :該 process 占用的固定的內(nèi)存量 ( KBytes )
TTY :該 process 是在那個(gè)終端機(jī)上面運(yùn)行
STAT :該程序目前的狀態(tài),狀態(tài)顯示與 ps -l 的 S 旗標(biāo)相同 ( R/S/T/Z )
START :該 process 被觸發(fā)啟動(dòng)的時(shí)間;
TIME :該 process 實(shí)際使用 CPU 運(yùn)行的時(shí)間。
COMMAND :該程序的實(shí)際指令
[root@localhost ~]# ps -lA
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0      1      0  0  80   0 - 31322 ep_pol ?        00:00:01 systemd
1 S     0      2      0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd
1 S     0      3      2  0  80   0 -     0 smpboo ?        00:00:00 ksoftirqd/0
1 S     0      6      2  0  80   0 -     0 worker ?        00:00:00 kworker/u256:0
..................................
可以發(fā)現(xiàn)每個(gè)字段與ps -l 的輸出情況相同,但顯示的程序則包括系統(tǒng)所的程序有
  • top :動(dòng)態(tài)觀察程序的變化
選項(xiàng)與參數(shù):
-d :后面可以接秒數(shù),就是整個(gè)程序畫面更新的秒數(shù)。默認(rèn)是5秒;
-b :以批次的方式執(zhí)行top,還有更多的參數(shù)可以使用喔!通常會(huì)搭配數(shù)據(jù)流重響來將批次的結(jié)果輸出成為文件。
-n:與-b搭配,意義是,需要進(jìn)行幾次top的輸出結(jié)果。
p :指定某些個(gè)PID來進(jìn)行觀察監(jiān)測而已。在top執(zhí)行過程當(dāng)中可以使用的按鍵指令:
? :示在top 當(dāng)中可以輸入的按鍵指令;
P :以CPU的使用資源排序顯示;
M :以Memory的使用資源排序顯示;
N :以PID來排序
T :由該P(yáng)rocess使用的CPU時(shí)間累積(TIME+) 排序。
k :給予某個(gè)PID一個(gè)訊號(hào)( signa1)
r:給予某個(gè)PID重新制訂一個(gè)nice值。
q。開top軟件的按鍵。
[root@localhost ~]# top -d 2   \\在里面按下r,則會(huì)輸入東西
top - 22:12:54 up 35 min,  2 users,  load average: 0.27, 0.20, 0.14
Tasks: 172 total,   2 running, 168 sleeping,   2 stopped,   0 zombie
%Cpu(s): 12.8 us,  2.1 sy,  0.0 ni, 85.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999936 total,    76540 free,   540976 used,   382420 buff/cache
KiB Swap:  2097148 total,  2094632 free,     2516 used.   233744 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND           
  2867 root      20   0 1484940 170296  49456 S  6.5 17.0   0:30.15 gnome-shell       
  1747 root      20   0  215824  26092  10428 R  4.0  2.6   0:11.07 Xorg              
  3368 root      20   0  574040  23780  14652 S  2.0  2.4   0:06.29 gnome-terminal-   
  2833 root      20   0 1094016  24516  15828 S  1.5  2.5   0:00.73 gnome-settings-   
  2904 root      20   0  574456   8876   5320 S  1.0  0.9   0:01.23 caribou           
   676 root      20   0    4368    592    496 S  0.5  0.1   0:01.79 rngd              
  2654 root      20   0   27644   1844    620 S  0.5  0.2   0:00.30 dbus-daemon       
  2821 root      20   0  201268   3428   2768 S  0.5  0.3   0:00.31 at-spi2-registr   
 43813 root      20   0  157708   2288   1584 R  0.5  0.2   0:00.03 top               
     1 root      20   0  125288   3832   2404 S  0.0  0.4   0:01.70 systemd           ..........................
top主要分為兩個(gè)畫面,上面的畫面為整個(gè)系統(tǒng)的資源使用狀態(tài),基本上總共有六行,顯示的內(nèi)容依序是: 

第一行( top...) :目前的時(shí)間,亦即是 10:52:16 那個(gè)項(xiàng)目;
開機(jī)到目前為止所經(jīng)過的時(shí)間,亦即是 up 1:40, 那個(gè)項(xiàng)目;
已經(jīng)登陸系統(tǒng)的使用者人數(shù),亦即是 2 users, 項(xiàng)目;
系統(tǒng)在 1, 5, 15 分鐘的平均工作負(fù)載

第二行( Tasks... ):顯示的是目前程序的總量與個(gè)別程序在什么狀態(tài)( running, sleeping, stopped, zombie )

第三行( %Cpus... ):顯示的是 CPU 的整體負(fù)載
6.7% us — 用戶空間占用CPU的百分比。
0.4% sy — 內(nèi)核空間占用CPU的百分比。
0.0% ni — 改變過優(yōu)先級(jí)的進(jìn)程占用CPU的百分比
92.9% id — 空閑CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中斷(Hardware IRQ)占用CPU的百分比
0.0% si — 軟中斷(Software Interrupts)占用CPU的百分比
0.0% st ---虛擬cpu等待實(shí)際cpu的時(shí)間百分比

第四行:內(nèi)存狀態(tài)
8306544k total — 物理內(nèi)存總量(8GB)
7775876k used — 使用中的內(nèi)存總量(7.7GB)
530668k free — 空閑內(nèi)存總量(530M)
79236k buffers — 緩存的內(nèi)存量 (79M)

第五行:swap交換分區(qū)
2031608k total — 交換區(qū)總量(2GB)
2556k used — 使用的交換區(qū)總量(2.5M)
2029052k free — 空閑交換區(qū)總量(2GB)
4231276k cached — 緩沖的交換區(qū)總量(4GB)

第六行:這個(gè)是當(dāng)在 top 程序當(dāng)中輸入指令時(shí),顯示狀態(tài)的地方。
PID :每個(gè) process 的 ID 啦!
USER :該 process 所屬的使用者;
PR : Priority 的簡寫,程序的優(yōu)先執(zhí)行順序,越小越早被執(zhí)行;
NI : Nice 的簡寫,與 Priority 有關(guān),也是越小越早被執(zhí)行;
%CPU : CPU 的使用率;
%MEM :內(nèi)存的使用率;
TIME+ : CPU 使用時(shí)間的累加;
[root@localhost ~]# top -b -n 2 > /tmp/123.txt
將top的信息進(jìn)行2次,然后將結(jié)果輸出到/tmp/123.txt文件中
[root@localhost ~]# cat /tmp/123.txt 
  • pstree
選項(xiàng)與參數(shù):

-A :各程序樹之間的連接以ASCII 字符來連接;
-U :各程序樹之間的連接以萬國碼的字符來連接。在某些終端接口下可能會(huì)有錯(cuò)誤;
P :并同時(shí)列出每個(gè)process 的PID;
u :并同時(shí)列出每個(gè)process的所屬帳號(hào)名稱。

新聞標(biāo)題:Linux進(jìn)程管理
文章鏈接:http://weahome.cn/article/ppgghh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部