溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

進(jìn)程的查看與管理

發(fā)布時(shí)間:2020-07-29 07:36:35 來(lái)源:網(wǎng)絡(luò) 閱讀:4034 作者:iTab 欄目:系統(tǒng)運(yùn)維

進(jìn)程的基本概念:


進(jìn)程可以理解成運(yùn)行中的程序的一個(gè)副本。程序通過(guò)內(nèi)核調(diào)度運(yùn)行起來(lái)成為一個(gè)進(jìn)程,并由內(nèi)核負(fù)責(zé)調(diào)度其運(yùn)行于CPU之上以執(zhí)行程序中的一部分或全部代碼,因此進(jìn)程是運(yùn)行中的動(dòng)態(tài)實(shí)體。而程序是放在文件系統(tǒng)上的一個(gè)文件,只要不刪除將永久存在,而進(jìn)程是有生命周期的,每個(gè)進(jìn)程都有創(chuàng)建、運(yùn)行、結(jié)束這一時(shí)間段。同一個(gè)程序的代碼可以被復(fù)制多份并由內(nèi)核調(diào)度成多個(gè)進(jìn)程運(yùn)行,因此可稱(chēng)為運(yùn)行中的程序的一個(gè)副本。


進(jìn)程調(diào)度:


進(jìn)程管理中最重要的一部分是進(jìn)程調(diào)度,可理解成對(duì)各個(gè)進(jìn)程運(yùn)行時(shí)的各種細(xì)節(jié)的安排和管理。當(dāng)文件系統(tǒng)上一個(gè)可執(zhí)行程序文件被觸發(fā)并通過(guò)內(nèi)核調(diào)度運(yùn)行為一個(gè)進(jìn)程時(shí),進(jìn)程中的指令、數(shù)據(jù)以及進(jìn)程相關(guān)的屬性信息(例如進(jìn)程的屬主、屬組、PID等)被內(nèi)核加載至內(nèi)存空間中,而指令需要運(yùn)行在CPU之上,此時(shí)CPU中的寄存器可記錄正在運(yùn)行中的指令的狀態(tài),例如正在取指令、執(zhí)行指令、加工數(shù)據(jù)、取數(shù)據(jù)...,其中指令指針寄存器IP用于存放下一條要執(zhí)行的指令的內(nèi)存地址。


但是需要CPU運(yùn)行的有眾多進(jìn)程而不只有一個(gè)進(jìn)程,因此內(nèi)核將CPU切分為多個(gè)時(shí)間片,并負(fù)責(zé)將這多個(gè)時(shí)間片按照優(yōu)先級(jí)分配給各個(gè)進(jìn)程。當(dāng)一個(gè)進(jìn)程在某一時(shí)間片運(yùn)行與CPU上時(shí),這個(gè)時(shí)間片就是該進(jìn)程允許運(yùn)行的時(shí)間,一旦過(guò)了這個(gè)時(shí)間片,該進(jìn)程將被中斷,這時(shí)內(nèi)核把這個(gè)進(jìn)程的中間狀態(tài)信息按照固定的格式存儲(chǔ)于內(nèi)存中,重新調(diào)度另一個(gè)進(jìn)程運(yùn)行于CPU之上,接著,CPU中用于存放進(jìn)程狀態(tài)相關(guān)數(shù)據(jù)將被下一個(gè)進(jìn)程所覆蓋。其中,將進(jìn)程的相關(guān)狀態(tài)信息存儲(chǔ)于內(nèi)存中這一過(guò)程稱(chēng)為保存現(xiàn)場(chǎng),而Linux內(nèi)核存儲(chǔ)進(jìn)程狀態(tài)信息是存儲(chǔ)進(jìn)具有固定格式的結(jié)構(gòu)體的,這個(gè)結(jié)構(gòu)體就是task struct,多個(gè)任務(wù)(進(jìn)程)的結(jié)構(gòu)體(task struct)組成鏈表結(jié)構(gòu)(task list),根據(jù)組成方式的不同有單向鏈表結(jié)構(gòu)、雙向鏈表結(jié)構(gòu)、循環(huán)鏈表結(jié)構(gòu)、雙向循環(huán)列表結(jié)構(gòu)等。打個(gè)比方,我們盛酒水需要用壇子,而這個(gè)固定結(jié)構(gòu)的容器--壇子,就是結(jié)構(gòu)體,總不能用地板裝酒水吧?而這些壇子按照一定的組織排列起來(lái)的結(jié)構(gòu)可類(lèi)比為鏈表結(jié)構(gòu)。


需要注意的是,當(dāng)CPU上的某一時(shí)間片結(jié)束后,內(nèi)核會(huì)調(diào)度另一個(gè)進(jìn)程運(yùn)行于CPU之上,而問(wèn)題是內(nèi)核該如何從眾多等待運(yùn)行的進(jìn)程中挑選出一個(gè)進(jìn)程并使其運(yùn)行于CPU上呢?為了在調(diào)度進(jìn)程時(shí)明確哪個(gè)進(jìn)程優(yōu)先執(zhí)行,哪個(gè)進(jìn)程后執(zhí)行,需要用進(jìn)程優(yōu)先級(jí)來(lái)做判斷。進(jìn)程優(yōu)先級(jí)范圍是0-139,分為實(shí)時(shí)優(yōu)先級(jí)(1-99)和靜態(tài)優(yōu)先級(jí)(100-139),其中實(shí)時(shí)優(yōu)先級(jí)與內(nèi)核執(zhí)行的系統(tǒng)管理操作有關(guān),用戶不可對(duì)實(shí)時(shí)優(yōu)先級(jí)進(jìn)行調(diào)整;而用戶可以調(diào)整的是靜態(tài)優(yōu)先級(jí)(可通過(guò)nice值進(jìn)行調(diào)整),普通用戶只可調(diào)低不可調(diào)高,只有系統(tǒng)管理員才可隨意調(diào)整。因此,內(nèi)核是將進(jìn)程優(yōu)先級(jí)來(lái)作為調(diào)度進(jìn)程次序的依據(jù)的,但由此內(nèi)核首先必須知道各個(gè)進(jìn)程的屬性(優(yōu)先級(jí)),因此在每次調(diào)度進(jìn)程執(zhí)行時(shí)總得遍歷內(nèi)存上所有結(jié)構(gòu)體中的信息,這將會(huì)消耗掉大量的時(shí)間。


Linux的2.6版本內(nèi)核通過(guò)精巧的設(shè)計(jì)解決了這一問(wèn)題:將所有進(jìn)程排成140個(gè)隊(duì)列,每個(gè)隊(duì)列對(duì)應(yīng)一個(gè)優(yōu)先級(jí),每個(gè)進(jìn)程歸屬至其優(yōu)先級(jí)的隊(duì)列中。而每次內(nèi)核調(diào)度進(jìn)程執(zhí)行時(shí)只需掃描這140個(gè)隊(duì)列的首部,并從這些隊(duì)列中挑選出一個(gè)進(jìn)程出來(lái)執(zhí)行即可。這樣一來(lái),無(wú)論進(jìn)程有多少個(gè),內(nèi)核都是通過(guò)掃描140個(gè)隊(duì)列首部來(lái)實(shí)現(xiàn)快速明確調(diào)度哪個(gè)進(jìn)程執(zhí)行于CPU上,因此調(diào)度時(shí)間不會(huì)隨進(jìn)程數(shù)量而改變。內(nèi)核的這種工作模式基于的算法符合程序界的Big O中的O(1)理想模型,即意味著隨著算法復(fù)雜度的增加,算法解決問(wèn)題(這里是進(jìn)程調(diào)度速度問(wèn)題)的時(shí)間不會(huì)變化。


但這樣一來(lái)又有一個(gè)問(wèn)題,當(dāng)一個(gè)進(jìn)程在一個(gè)時(shí)間片執(zhí)行完之后應(yīng)該如何歸隊(duì)呢?在Linux中,進(jìn)程按照優(yōu)先級(jí)排出隊(duì)列,而每個(gè)隊(duì)列內(nèi)部又分為運(yùn)行隊(duì)列過(guò)期隊(duì)列,實(shí)際上內(nèi)核就是通過(guò)掃描各個(gè)運(yùn)行隊(duì)列首部來(lái)做判斷的,而進(jìn)程在CPU執(zhí)行之后返回過(guò)期隊(duì)列中,而運(yùn)行隊(duì)列繼續(xù)等待內(nèi)核的調(diào)度;一旦運(yùn)行隊(duì)列中的進(jìn)程全部執(zhí)行完畢(每個(gè)進(jìn)程都在CPU上輪流執(zhí)行了一遍),這時(shí)運(yùn)行隊(duì)列將轉(zhuǎn)變?yōu)檫^(guò)期隊(duì)列,而原來(lái)的過(guò)期隊(duì)列則轉(zhuǎn)變?yōu)檫\(yùn)行隊(duì)列等待內(nèi)核再次調(diào)度,重復(fù)上述邏輯。



進(jìn)程創(chuàng)建:


主機(jī)開(kāi)機(jī)后,首先將內(nèi)核加載至內(nèi)存中,在CPU上開(kāi)始運(yùn)行內(nèi)核代碼。接著由進(jìn)程開(kāi)始創(chuàng)建初始化進(jìn)程init,并將用戶空間的管理事務(wù)交給init這個(gè)進(jìn)程管理。接著init會(huì)創(chuàng)建出子進(jìn)程,而這些子進(jìn)程可以分別創(chuàng)建出各自的子進(jìn)程,因此除了init進(jìn)程之外,其他的進(jìn)程都由其父進(jìn)程創(chuàng)建;init進(jìn)程可視為內(nèi)核的代理,負(fù)責(zé)管理用戶空間進(jìn)程的創(chuàng)建和關(guān)閉,并向內(nèi)核提交相應(yīng)的請(qǐng)求,但init不能代替內(nèi)核執(zhí)行特權(quán)指令。


那么,在什么情況下父進(jìn)程需要?jiǎng)?chuàng)建子進(jìn)程呢?當(dāng)一個(gè)父進(jìn)程需要借助于某些程序完成復(fù)雜任務(wù)時(shí),通常需要調(diào)用系統(tǒng)上某個(gè)可執(zhí)行程序文件,將其創(chuàng)建為進(jìn)程,而創(chuàng)建子進(jìn)程需要通過(guò)fork()這個(gè)系統(tǒng)調(diào)用接口向內(nèi)核申請(qǐng)?zhí)峤灰獎(jiǎng)?chuàng)建的進(jìn)程,而后再通過(guò)clone()接口將自身的數(shù)據(jù)復(fù)制一份給子進(jìn)程;需要注意的是,此時(shí)父進(jìn)程和子進(jìn)程在內(nèi)存中占據(jù)相同的空間,而一旦子進(jìn)程需要修改數(shù)據(jù)時(shí),父進(jìn)程會(huì)重新開(kāi)辟一個(gè)相同的內(nèi)存空間給子進(jìn)程,這是父進(jìn)程和子進(jìn)程不在占據(jù)同一內(nèi)存空間,這種機(jī)制稱(chēng)為寫(xiě)時(shí)復(fù)制機(jī)制(CoW)。


當(dāng)子進(jìn)程完成復(fù)雜任務(wù)時(shí),其父進(jìn)程會(huì)關(guān)閉該子進(jìn)程,內(nèi)核將內(nèi)存收回。


init程序在不同版本的體現(xiàn):

CentOS 5:
    SysV init,經(jīng)典版本,缺陷是在系統(tǒng)啟動(dòng)和引導(dǎo)時(shí),它創(chuàng)建各子進(jìn)程是通過(guò)寫(xiě)腳本方式借助于
    shell來(lái)實(shí)現(xiàn)的,因?yàn)閟hell腳本是大量命令的堆砌,每個(gè)命令運(yùn)行時(shí)會(huì)創(chuàng)建進(jìn)程,因此每啟動(dòng)一
    次就需要?jiǎng)?chuàng)建上千個(gè)進(jìn)程,因此執(zhí)行速度非常慢。
    
CentOS 6:
    upstart,基于dbus方式進(jìn)行通信,同SysV init是通過(guò)運(yùn)行很多命令創(chuàng)建很多進(jìn)程來(lái)完成的,但
    不同的是upstart能夠并行啟動(dòng)具有關(guān)聯(lián)性的服務(wù)程序,實(shí)現(xiàn)多線創(chuàng)建進(jìn)程,如果CPU有多個(gè)時(shí)會(huì)
    快很多,而SysV init僅能以串行方式實(shí)現(xiàn)啟動(dòng)程序。
    
CentOS 7:
    systemd,以一個(gè)程序完成整個(gè)系統(tǒng)的啟動(dòng)和引導(dǎo),而且需要啟動(dòng)的進(jìn)程總數(shù)僅有10個(gè)左右,因此
    系統(tǒng)啟動(dòng)和引導(dǎo)非常快。CentOS7上啟動(dòng)或關(guān)閉服務(wù)程序時(shí)需要通過(guò)systemctl實(shí)現(xiàn),因?yàn)檫@些服
    務(wù)統(tǒng)一由systemd控制;
    

#不同版本的init程序文件名都為init。


進(jìn)程內(nèi)存:


承接上述,當(dāng)內(nèi)核運(yùn)行起來(lái)之后,會(huì)占據(jù)一定的內(nèi)存空間,例如對(duì)于Linux來(lái)講一般是1G。其他進(jìn)程運(yùn)行起來(lái)之后,內(nèi)核會(huì)將內(nèi)存按空間分成多片分配給各個(gè)進(jìn)程使用,這里的每個(gè)“片”指的是頁(yè)框(page frame),頁(yè)框就是用來(lái)存儲(chǔ)頁(yè)面數(shù)據(jù)(內(nèi)存進(jìn)程信息)的,一個(gè)頁(yè)框就是4K大小的內(nèi)存空間塊。而將真實(shí)的物理內(nèi)存空間連續(xù)地分配給各進(jìn)程使用明顯不合適,因?yàn)橥臻e的內(nèi)存空間是離散分布的,而且各個(gè)進(jìn)程在運(yùn)行過(guò)程中會(huì)產(chǎn)生各種中間數(shù)據(jù),這也會(huì)導(dǎo)致進(jìn)程占據(jù)的內(nèi)存空間加大。因此,內(nèi)核將底層的物理內(nèi)存上的空閑的碎片(頁(yè)框)收集起來(lái),并為上層運(yùn)行的進(jìn)程虛擬出連續(xù)的內(nèi)存空間,這個(gè)虛擬的內(nèi)存地址也稱(chēng)為邏輯地址,讓每個(gè)進(jìn)程“以為”其占據(jù)的內(nèi)存空間是連續(xù)分布的,這個(gè)連續(xù)的邏輯地址稱(chēng)為線性地址空間。內(nèi)核會(huì)為每個(gè)進(jìn)程虛擬出一個(gè)“假象”,即主機(jī)上只運(yùn)行兩個(gè)程序:內(nèi)核和進(jìn)程自己,并且“以為”線性地址空間中除了1G內(nèi)存分配給內(nèi)核使用,其余的內(nèi)存空間均可由進(jìn)程自己使用。事實(shí)上,進(jìn)程真正只用到一小部分內(nèi)存空間,并映射到真實(shí)的物理內(nèi)存上連續(xù)或離散的內(nèi)存空間。邏輯地址和物理地址之間映射關(guān)系則存儲(chǔ)于task struct。當(dāng)進(jìn)程執(zhí)行時(shí),CPU中有專(zhuān)門(mén)用于將邏輯地址轉(zhuǎn)換為物理內(nèi)存地址的電路,即內(nèi)存管理單元(MMU, Memory Management Unit),因此需要內(nèi)核將內(nèi)存的映射關(guān)系加載至MMU中。


當(dāng)進(jìn)程被分配好內(nèi)存后,其指令、數(shù)據(jù)以及進(jìn)程相關(guān)的屬性信息會(huì)加載至內(nèi)存中,在內(nèi)存低地址的地方存放指令(code),而數(shù)據(jù)可以由變量等數(shù)據(jù)結(jié)構(gòu)組織存放于內(nèi)存中,當(dāng)然也可以是普通數(shù)據(jù);進(jìn)程還會(huì)將一部分空間作為堆(heap)內(nèi)存和棧(stack)內(nèi)存;當(dāng)進(jìn)程運(yùn)行的中間數(shù)據(jù)增加時(shí),或者需要加載磁盤(pán)上更多數(shù)據(jù)至內(nèi)存時(shí),存放于堆內(nèi)存和棧內(nèi)存中的數(shù)據(jù)量增大,堆內(nèi)存空間向棧頂?shù)姆较驍U(kuò)展,而棧內(nèi)存空間向堆的方向擴(kuò)展;一旦兩者在擴(kuò)展時(shí)相遇,則說(shuō)明物理內(nèi)存空間不足;這時(shí)交換空間(swap)就出場(chǎng)了,swap可通過(guò)近期最少使用算法(LRU, Least Recently Used)掃描出內(nèi)存上內(nèi)存上最近不常用的數(shù)據(jù),將其暫存于swap中,而騰挪出來(lái)的內(nèi)存空間可供進(jìn)程使用。


當(dāng)然,并非所有內(nèi)存空間中的數(shù)據(jù)都可交換至swap中,關(guān)鍵性數(shù)據(jù)(如程序指令code)就不可交換,但非關(guān)鍵性數(shù)據(jù)(例如程序中的一些不常用數(shù)據(jù)data);我們把不能用于交換的內(nèi)存空間稱(chēng)為常駐內(nèi)存集,而能夠交換的內(nèi)存空間稱(chēng)為虛擬內(nèi)存集。不過(guò),如果交換了內(nèi)存空間,那么線性地址空間中映射的物理內(nèi)存空間地址也會(huì)發(fā)生改變,因此當(dāng)進(jìn)程需要重新訪問(wèn)被交換至磁盤(pán)上的swap或加載磁盤(pán)上其他空間的數(shù)據(jù)至內(nèi)存時(shí),需要先請(qǐng)求內(nèi)核調(diào)用,內(nèi)核將磁盤(pán)上的數(shù)據(jù)先加載至內(nèi)核內(nèi)存中,再?gòu)?fù)制一份給進(jìn)程內(nèi)存。并且,當(dāng)進(jìn)程在CPU上執(zhí)行時(shí)需要更新MMU上的映射關(guān)系。


進(jìn)程間通信:


雖說(shuō)進(jìn)程“以為”主機(jī)上只運(yùn)行內(nèi)核和進(jìn)程自己,但進(jìn)程間是可以通過(guò)IPC(Inter-Process Communication)技術(shù)實(shí)現(xiàn)通信的。而進(jìn)程間通信在同一主機(jī)上和不同主機(jī)上是各不相同的。


IPC(Inter-Process Communication):

同一主機(jī)上:

signal:通過(guò)發(fā)送信號(hào)方式通信;
shm:通過(guò)共享內(nèi)存方式通信;
semerphor:旗語(yǔ),通過(guò)類(lèi)似“打手勢(shì)”方式通信;

不同主機(jī)上上:

rpc:remote procecure call,即遠(yuǎn)程過(guò)程調(diào)用,進(jìn)程通過(guò)調(diào)用遠(yuǎn)程主機(jī)上的庫(kù)函數(shù)或數(shù)據(jù)加工處理
的結(jié)果實(shí)現(xiàn)通信;rpc是基于socket實(shí)現(xiàn),但比socket更為抽象的一種通信方式;

socket:通過(guò)進(jìn)程監(jiān)聽(tīng)的方式實(shí)現(xiàn)通信,通信雙方事先需要建立虛鏈路(tcp連接);在用戶空間表現(xiàn)為
socket文件,雙方主機(jī)上的socket文件都保存本地主機(jī)的IP/Port以及對(duì)方主機(jī)的IP/Port,一方用戶
可通過(guò)向socket文件寫(xiě)數(shù)據(jù),另一方用戶則可通過(guò)讀取socket文件獲取數(shù)據(jù);


進(jìn)程類(lèi)型:


根據(jù)是否與終端相關(guān)分類(lèi):

守護(hù)進(jìn)程:在系統(tǒng)引導(dǎo)過(guò)程中啟動(dòng)的進(jìn)程,跟終端無(wú)關(guān);
前臺(tái)進(jìn)程:通過(guò)終端啟動(dòng)的進(jìn)程,跟終端相關(guān);

#注意:也可以把在前臺(tái)啟動(dòng)的進(jìn)程送往后臺(tái),以守護(hù)模式運(yùn)行;


根據(jù)進(jìn)程占用CPU多還是IO多分類(lèi):

CPU-bound:一般非交互式進(jìn)程屬于CPU密集型;
IO-bound:一般交互式進(jìn)程屬于IO密集型;IO密集型進(jìn)程的優(yōu)先級(jí)應(yīng)比CPU密集型進(jìn)程高;

#根據(jù)Linux哲學(xué)思想之一:程序啟動(dòng)之后應(yīng)盡量避免與用戶交互,可知CPU-bound這一類(lèi)進(jìn)程應(yīng)該多
分配一些CPU資源。


進(jìn)程狀態(tài):

(1)運(yùn)行態(tài):running;

(2)就緒態(tài):ready,可以運(yùn)行但沒(méi)在CPU上運(yùn)行;也可以稱(chēng)為睡眠態(tài);

(3)睡眠態(tài):分為可中斷睡眠和不可中斷睡眠;
        可中斷睡眠:interruptable,任何時(shí)候都可喚醒并運(yùn)行;
        不可中斷睡眠:uninterruptable,例如等待IO過(guò)程;
        
(4)停止態(tài):stopped,即暫停于內(nèi)存中,不會(huì)別調(diào)度,除非手動(dòng)啟動(dòng)之;

(5)僵死態(tài):zombie,子進(jìn)程運(yùn)行結(jié)束之后需要等待其父進(jìn)程關(guān)閉,但若其父進(jìn)程意外事先關(guān)閉,則
子進(jìn)程會(huì)一直等待下去,此時(shí)該子進(jìn)程即為僵尸進(jìn)程,或者說(shuō)處于僵死態(tài);

#等待IO過(guò)程:
當(dāng)進(jìn)程執(zhí)行時(shí)需要用到的數(shù)據(jù)不在內(nèi)存中時(shí),需要向內(nèi)核發(fā)起申請(qǐng)(通過(guò)系統(tǒng)調(diào)用接口,進(jìn)程無(wú)法直接
訪問(wèn)硬件),內(nèi)核將磁盤(pán)上的數(shù)據(jù)先加載至內(nèi)核內(nèi)存中,再將內(nèi)核內(nèi)存中加載的數(shù)據(jù)復(fù)制一份給進(jìn)程內(nèi)
存;


線程的基本概念:


一般來(lái)講,每個(gè)程序運(yùn)行時(shí)只能有一個(gè)執(zhí)行流;而如果程序內(nèi)部有很多代碼需要執(zhí)行并且這些代碼彼此之間實(shí)現(xiàn)的功能又比較獨(dú)立,為了讓程序執(zhí)行速度更快,則可通過(guò)并行編程的模式將程序開(kāi)發(fā)成可以互相獨(dú)立并且能單獨(dú)執(zhí)行的執(zhí)行流,而這個(gè)執(zhí)行流就是線程;線程是進(jìn)程的子單位。當(dāng)有多個(gè)CPU時(shí),程序啟動(dòng)后創(chuàng)建出多個(gè)并行執(zhí)行的線程(執(zhí)行流),這些線程可分別運(yùn)行于不同顆CPU之上。不過(guò),當(dāng)主機(jī)只有一個(gè)CPU時(shí),將進(jìn)程分成多個(gè)線程執(zhí)行反而會(huì)降低運(yùn)行速度,因?yàn)閮?nèi)核在切換調(diào)度進(jìn)程(線程)時(shí)會(huì)消耗很多CPU時(shí)間。


關(guān)于服務(wù)類(lèi)程序:


對(duì)于Linux來(lái)講,基本是通過(guò)各個(gè)具有簡(jiǎn)單功能的小程序組合起來(lái)完成復(fù)雜任務(wù)的,因此在Linux上進(jìn)程都是輕量級(jí)的,和線程幾乎沒(méi)差別。雖然現(xiàn)在很多服務(wù)類(lèi)程序都是基于并行編程模式編寫(xiě)的,但當(dāng)服務(wù)器接收到的請(qǐng)求過(guò)多時(shí)響應(yīng)速度仍然會(huì)非常慢,因此現(xiàn)在編程時(shí)可通過(guò)精巧的設(shè)計(jì),使一個(gè)進(jìn)程能同時(shí)響應(yīng)多個(gè)進(jìn)程。


作為一名Linux運(yùn)維人員,需要有鑒定當(dāng)前系統(tǒng)的運(yùn)行狀態(tài)、資源的消耗情況、進(jìn)程啟動(dòng)的數(shù)量和模式等,例如當(dāng)用戶網(wǎng)頁(yè)打開(kāi)速度慢時(shí),我們需要查看當(dāng)前系統(tǒng)上運(yùn)行了哪些進(jìn)程、是否有我們期望運(yùn)行的進(jìn)程、期望運(yùn)行的這個(gè)進(jìn)程占據(jù)了CPU和內(nèi)存多大百分比、是否要調(diào)整進(jìn)程的優(yōu)先級(jí)、以及是否把CPU和內(nèi)存資源占滿......對(duì)于較大型的服務(wù)類(lèi)程序,例如Java編寫(xiě)的程序比較吃?xún)?nèi)存,常常需要運(yùn)維人員查看jvm虛擬機(jī)運(yùn)行是否正常、是否要調(diào)整其垃圾回收策略、是否其內(nèi)存資源使用的上限或下限、是否要再啟動(dòng)一個(gè)jvm進(jìn)程來(lái)實(shí)現(xiàn)并行響應(yīng)......總之,對(duì)于運(yùn)維人員來(lái)講,具有鑒定當(dāng)前系統(tǒng)上的運(yùn)行狀態(tài)的能力非常重要,因?yàn)檫\(yùn)維基本都是服務(wù),而服務(wù)是通過(guò)進(jìn)程來(lái)提供的。


Linux系統(tǒng)上的進(jìn)程查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup, nice, renice, killall, ...


pstree命令:

display a tree of processes

用于顯示進(jìn)程樹(shù)。


示例:

在CentOS 6上顯示進(jìn)程樹(shù):

[root@osyunwei ~]# pstree
init─┬─NetworkManager
      ├─abrtd
      ├─acpid
      ├─atd
      ├─auditd───{auditd}
      ├─automount───4*[{automount}]
      ├─bluetoothd
      ├─certmonger
      ├─console-kit-dae───63*[{console-kit-da}]
      ├─crond
      ├─cupsd
      ├─dbus-daemon───{dbus-daemon}
      ├─dmeventd───2*[{dmeventd}]
      ├─gpm
      ├─hald─┬─hald-runner─┬─hald-addon-acpi
      │        │                 ├─hald-addon-inpu
      │        │                 ├─hald-addon-rfki
      │        │                 └─hald-addon-stor
      │        └─{hald}
      ├─2*[iscsid]
      ├─iscsiuio───2*[{iscsiuio}]
      ├─ksmtuned───sleep
      ├─login───bash
      ├─master─┬─pickup
      │          └─qmgr
      ├─5*[mingetty]
      ├─modem-manager
      ├─pcscd───{pcscd}
      ├─polkitd
      ├─portreserve
      ├─rpc.statd
      ├─rpcbind
      ├─rsyslogd───3*[{rsyslogd}]
      ├─sshd─┬─sshd───bash
      │        └─sshd───bash───pstree
      ├─udevd───2*[udevd]
      └─wpa_supplicant


在CentOS 7上顯示進(jìn)程樹(shù):

[root@www ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
         │                  └─2*[{NetworkManager}]
         ├─abrt-watch-log
         ├─abrtd
         ├─anacron
         ├─atd
         ├─auditd───{auditd}
         ├─crond
         ├─dbus-daemon───{dbus-daemon}
         ├─firewalld───{firewalld}
         ├─httpd───6*[httpd]
         ├─irqbalance
         ├─login───bash
         ├─lsmd
         ├─lvmetad
         ├─master─┬─pickup
         │          └─qmgr
         ├─polkitd───5*[{polkitd}]
         ├─rngd
         ├─rpcbind
         ├─rsyslogd───2*[{rsyslogd}]
         ├─smartd
         ├─sshd───sshd───bash───pstree
         ├─systemd-journal
         ├─systemd-logind
         ├─systemd-udevd
         ├─tuned───4*[{tuned}]
         └─vmtoolsd───{vmtoolsd}


ps命令:

report a snapshot of the current processes.

顯示ps命令執(zhí)行那一刻系統(tǒng)上進(jìn)程的運(yùn)行狀態(tài)。


ps命令查看內(nèi)核管理進(jìn)程參數(shù)的接口 --> 偽文件系統(tǒng)/proc

進(jìn)程是由內(nèi)核管理的,而內(nèi)核管理進(jìn)程的相關(guān)信息可通過(guò)接口來(lái)查詢(xún),在Linux上這個(gè)接口就是/proc目錄,內(nèi)核參數(shù)是模擬成文件系統(tǒng)類(lèi)型的,每個(gè)文件即為內(nèi)核參數(shù)。/proc文件系統(tǒng)存放于內(nèi)存空間中,用于存放內(nèi)核中的狀態(tài)信息。

內(nèi)核參數(shù)有兩種:

(1)可設(shè)置其值從而調(diào)整內(nèi)核運(yùn)行特性的參數(shù):這些參數(shù)通常存放于/proc/sys/目錄下,但并非位于
/proc/sys目錄下的文件(參數(shù))均可設(shè)置,只能設(shè)置具有寫(xiě)權(quán)限的文件(參數(shù))。

(2)狀態(tài)參數(shù):用于輸出內(nèi)核中的統(tǒng)計(jì)信息和狀態(tài)信息;僅用于查看。

每個(gè)進(jìn)程在/proc目錄下都有一個(gè)與其PID同名的目錄,這個(gè)目錄下的每個(gè)文件都是內(nèi)核參數(shù),用于專(zhuān)門(mén)保存當(dāng)前進(jìn)程的相關(guān)信息。

如下,顯示init進(jìn)程對(duì)應(yīng)的目錄:

進(jìn)程的查看與管理









通過(guò)參數(shù)comm可查看啟動(dòng)該進(jìn)程的程序文件:

[root@osyunwei ~]# cat /proc/1/comm 
init

通過(guò)參數(shù)maps可查看邏輯地址和物理內(nèi)存地址的映射關(guān)系:

[root@osyunwei ~]# cat /proc/1/maps
7f10e779e000-7f10e77ab000 r-xp 00000000 fd:01 398008    /lib64/libnss_files-2.12.so
                                                        #庫(kù)函數(shù)
7f10e77ab000-7f10e79aa000 ---p 0000d000 fd:01 398008    /lib64/libnss_files-2.12.so
7f10e79aa000-7f10e79ab000 r--p 0000c000 fd:01 398008    /lib64/libnss_files-2.12.so
7f10e79ab000-7f10e79ac000 rw-p 0000d000 fd:01 398008    /lib64/libnss_files-2.12.so
7f10e79ac000-7f10e7b36000 r-xp 00000000 fd:01 462418    /lib64/libc-2.12.so
7f10e7b36000-7f10e7d36000 ---p 0018a000 fd:01 462418    /lib64/libc-2.12.so
.....(中間省略).....
7f10e8c01000-7f10e8c24000 r-xp 00000000 fd:01 149577    /sbin/init
7f10e8e23000-7f10e8e25000 r--p 00022000 fd:01 149577    /sbin/init
7f10e8e25000-7f10e8e26000 rw-p 00024000 fd:01 149577    /sbin/init
7f10eaa25000-7f10eaa64000 rw-p 00000000 00:00 0         [heap]    #堆內(nèi)存
7ffc9a845000-7ffc9a85a000 rw-p 00000000 00:00 0         [stack]   #棧內(nèi)存
7ffc9a8fd000-7ffc9a8fe000 r-xp 00000000 00:00 0         [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

因?yàn)樵?proc目錄下的內(nèi)核參數(shù)對(duì)于非內(nèi)核級(jí)開(kāi)發(fā)人員來(lái)說(shuō)不便于查看,因此就有諸多查看命令專(zhuān)門(mén)將其中這些內(nèi)核參數(shù)信息收集起來(lái)并以一種直觀的方式顯示出來(lái),ps命令就是其中一個(gè)比較經(jīng)典的命令;


ps命令格式:

ps [options]


ps命令選項(xiàng)有三種風(fēng)格:

(1)UNIX選項(xiàng):選項(xiàng)之前必須帶'-'
(2)BSD選項(xiàng):選項(xiàng)之間不能帶'-'
(3)GNU長(zhǎng)格式選項(xiàng):選項(xiàng)之前必須帶'--'


常用選項(xiàng):

    a:顯示所有與終端相關(guān)的進(jìn)程;

    x:顯示所有與終端無(wú)關(guān)的進(jìn)程;

    u:以用戶為中心組織進(jìn)程狀態(tài)信息的顯示;

    o field1,field2,...:自定義要顯示的字段列表;各字段以逗號(hào)分隔;


    -e:顯示所有進(jìn)程

    -f:以完整格式顯示進(jìn)程狀態(tài)信息;

    -F:以完整格式顯示進(jìn)程狀態(tài)信息(顯示項(xiàng)比-f選項(xiàng)更多);

    -H:Hierarchy,以層級(jí)結(jié)構(gòu)顯示進(jìn)程的相關(guān)信息;


進(jìn)程啟動(dòng)方式:

(1)系統(tǒng)啟動(dòng)過(guò)程中自動(dòng)啟動(dòng):與終端無(wú)關(guān)的進(jìn)程;

(2)用戶通過(guò)終端啟動(dòng)的進(jìn)程:與終端相關(guān)的進(jìn)程;


①常用組合之一:aux


顯示所有與終端相關(guān)的進(jìn)程:

[root@localhost ~]# ps a
   PID TTY      STAT   TIME COMMAND
  2571 tty1     Ss+    0:02 -bash
 13604 pts/0    Ss     0:00 -bash
 13742 pts/0    R+     0:00 ps a
 
 
 #各字段意義:
 PID:進(jìn)程號(hào);
 TTY:與進(jìn)程相關(guān)的終端設(shè)備;
 STAT:進(jìn)程的狀態(tài);
 TIME:進(jìn)程累積占用CPU的時(shí)間;
 COMMAND:?jiǎn)?dòng)該進(jìn)程的程序命令(包括選項(xiàng)和參數(shù))


顯示所有與終端無(wú)關(guān)的進(jìn)程:

[root@localhost ~]# ps x
  PID TTY    STAT   TIME COMMAND
    1 ?      Ss     0:28 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    2 ?      S      0:00 [kthreadd]
    3 ?      S      0:00 [ksoftirqd/0]
    5 ?      S<     0:00 [kworker/0:0H]
    7 ?      S      0:02 [migration/0]
    8 ?      S      0:00 [rcu_bh]
    9 ?      R      0:30 [rcu_sched]
   10 ?      S      0:00 [watchdog/0]
    .....(省略).....
 1982 ?      Ss     0:12 /usr/sbin/httpd -DFOREGROUND
 2571 tty1   Ss+    0:02 -bash
 5213 ?      Ssl    0:12 /usr/sbin/NetworkManager --no-daemon
 7625 ?      S<     0:00 [kworker/1:2H]
    .....(省略).....
13739 ?      S      0:00 [kworker/3:1]
13740 ?      S<     0:00 [kworker/3:2H]
13755 pts/0  R+     0:00 ps x


#'?'表示與終端無(wú)關(guān);
#根據(jù)PID號(hào)從小到大排序,各字段意義同上;


顯示所有進(jìn)程:

[root@localhost ~]# ps ax


以用戶為中心顯示所有進(jìn)程:

[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.6 193628  6732 ?        Ss   Feb13   0:28 /usr/lib/systemd/systemd 
--switched-root --system --des
root          2  0.0  0.0      0     0 ?        S    Feb13   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    Feb13   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   Feb13   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    Feb13   0:02 [migration/0]
root          8  0.0  0.0      0     0 ?        S    Feb13   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    Feb13   0:30 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S    Feb13   0:00 [watchdog/0]
root         11  0.0  0.0      0     0 ?        S    Feb13   0:00 [watchdog/1]
root         12  0.0  0.0      0     0 ?        S    Feb13   0:03 [migration/1]
root         13  0.0  0.0      0     0 ?        S    Feb13   0:03 [ksoftirqd/1]
.....(以下省略).....


#各字段意義:
USER:運(yùn)行進(jìn)程的用戶;
PID:進(jìn)程號(hào);
%CPU:進(jìn)程占用CPU資源的百分比;
%MEM:進(jìn)程占用內(nèi)存資源的百分比;
VSZ:Virtual memory SiZe,虛擬內(nèi)存集;
RSS:ReSident Size,常駐內(nèi)存集;
TTY:與進(jìn)程相關(guān)的終端設(shè)備;
STAT:進(jìn)程狀態(tài);
START:進(jìn)程的啟動(dòng)時(shí)間;
TIME:進(jìn)程累積占用CPU時(shí)間;
COMMAND:進(jìn)程由哪個(gè)命令程序啟動(dòng),帶'[]'代表為內(nèi)核線程,而通過(guò)pstree命令只能顯示進(jìn)程;


進(jìn)程狀態(tài)(STAT):

R:running,運(yùn)行態(tài);
S:interruptable sleeping,可中斷睡眠;
D:uninterruptable sleeping,不可中斷睡眠;
T:stopped,停止態(tài);
Z:zombie,僵死態(tài);

+:前臺(tái)進(jìn)程(前臺(tái)指的是通過(guò)終端運(yùn)行,需要占據(jù)命令提示符);
l:多線程進(jìn)程;
N:低優(yōu)先級(jí)進(jìn)程;
<:高優(yōu)先級(jí)進(jìn)程;
s:session leader,會(huì)話主導(dǎo)者(例如bash);


②常用組合之二:ef


顯示所有進(jìn)程:

[root@localhost ~]# ps -e
  PID TTY          TIME CMD
    1 ?        00:00:28 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
   .....(以下省略).....


以完整格式顯示進(jìn)程信息:

[root@localhost ~]# ps -f
UID         PID   PPID  C STIME TTY          TIME CMD
root      13604  13600  0 19:42 pts/0    00:00:00 -bash
root      13882  13604  0 21:03 pts/0    00:00:00 ps -f

#STIME:進(jìn)程的啟動(dòng)時(shí)間;


以完整格式顯示所有進(jìn)程:

[root@localhost ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 Feb13 ?        00:00:28 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2      0  0 Feb13 ?        00:00:00 [kthreadd]
root          3      2  0 Feb13 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 Feb13 ?        00:00:00 [kworker/0:0H]
root          7      2  0 Feb13 ?        00:00:02 [migration/0]
root          8      2  0 Feb13 ?        00:00:00 [rcu_bh]
root          9      2  0 Feb13 ?        00:00:31 [rcu_sched]
root         10      2  0 Feb13 ?        00:00:00 [watchdog/0]
root         11      2  0 Feb13 ?        00:00:00 [watchdog/1]
.....(以下省略).....


#各字段意義:
UID:effective user,有效用戶,即運(yùn)行該進(jìn)程的用戶;
PID:進(jìn)程號(hào);
PPID:父進(jìn)程號(hào);
C:cpu utilization,CPU使用率,即占用CPU資源的百分比;
STIME:進(jìn)程的啟動(dòng)日期;
TTY:與進(jìn)程相關(guān)的終端設(shè)備;'?'表示與終端無(wú)關(guān);
TIME:進(jìn)程累積占用CPU的時(shí)間;
CMD:?jiǎn)?dòng)進(jìn)程的命令程序,帶'[]'表示為內(nèi)核線程;


以更為完整的格式顯示所有進(jìn)程:

[root@localhost ~]# ps -eF
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          1      0  0 48407  6732   3 Feb13 ?        00:00:28 /usr/lib/systemd/systemd 
--switched-root --system --des
root          2      0  0     0     0   0 Feb13 ?        00:00:00 [kthreadd]
root          3      2  0     0     0   0 Feb13 ?        00:00:00 [ksoftirqd/0]
root          5      2  0     0     0   0 Feb13 ?        00:00:00 [kworker/0:0H]
root          7      2  0     0     0   0 Feb13 ?        00:00:02 [migration/0]
root          8      2  0     0     0   2 Feb13 ?        00:00:00 [rcu_bh]
root          9      2  0     0     0   0 Feb13 ?        00:00:31 [rcu_sched]
root         10      2  0     0     0   0 Feb13 ?        00:00:00 [watchdog/0]
root         11      2  0     0     0   1 Feb13 ?        00:00:00 [watchdog/1]


#各字段意義:
UID:運(yùn)行該進(jìn)程的用戶;
PID:進(jìn)程號(hào);
PPID:父進(jìn)程號(hào);
C:CPU使用率;
SZ:即VSZ,虛擬內(nèi)存集;
RSS:常駐內(nèi)存集;
STIME:進(jìn)程的啟動(dòng)日期;
TTY:與進(jìn)程相關(guān)的終端設(shè)備;
TIME:進(jìn)程累積占用CPU的時(shí)間;
CMD:?jiǎn)?dòng)進(jìn)程的命令程序;


③常用組合之三:-efH


以層級(jí)結(jié)構(gòu)顯示進(jìn)程相關(guān)信息:

[root@localhost ~]# ps -efH
UID         PID   PPID  C STIME TTY          TIME CMD
root          2      0  0 Feb13 ?        00:00:00 [kthreadd]
root          3      2  0 Feb13 ?        00:00:00   [ksoftirqd/0]
root          5      2  0 Feb13 ?        00:00:00   [kworker/0:0H]
root          7      2  0 Feb13 ?        00:00:02   [migration/0]
root          8      2  0 Feb13 ?        00:00:00   [rcu_bh]
root          9      2  0 Feb13 ?        00:00:31   [rcu_sched]
root         10      2  0 Feb13 ?        00:00:00   [watchdog/0]
root         11      2  0 Feb13 ?        00:00:00   [watchdog/1]
root         12      2  0 Feb13 ?        00:00:03   [migration/1]
root         13      2  0 Feb13 ?        00:00:03   [ksoftirqd/1]
.....(中間省略).....
root        840      1  0 Feb13 ?        00:00:02   /usr/sbin/rsyslogd -n
dbus        841      1  0 Feb13 ?        00:00:22   /bin/dbus-daemon --system --address=sys
temd: --nofork --nopidfile --s
root        854      1  0 Feb13 ?        00:00:00   /usr/sbin/sshd
root      13600    854  0 19:42 ?        00:00:01     sshd: root@pts/0
root      13604  13600  0 19:42 pts/0    00:00:00       -bash
root      13993  13604  0 21:15 pts/0    00:00:00         ps -efH
root        861      1  0 Feb13 ?        00:00:06   /usr/lib/systemd/systemd-logind
root        868      1  0 Feb13 ?        00:00:00   /usr/sbin/atd -f
root        870      1  0 Feb13 ?        00:00:01   /usr/sbin/crond -n
root        884      1  0 Feb13 ?        00:00:00   login -- root
root       2571    884  0 Feb13 tty1     00:00:02     -bash
.....(以下省略).....


#CMD字段縮進(jìn)級(jí)別相同的進(jìn)程表示為同級(jí)子進(jìn)程;


④常用組合之四:-eo, axo


o選項(xiàng):

o field1,field2,...:自定義要顯示的字段列表,各字段以逗號(hào)分隔;
    常見(jiàn)的field有:pid, ppid, ni, pri, rtpri, pcpu, psr, stat, comm(cmd), tty, ...
        pid:進(jìn)程號(hào);
        ppid:父進(jìn)程號(hào);
        ni:nice值;
        priority:優(yōu)先級(jí);
        rtpri:實(shí)時(shí)優(yōu)先級(jí);
        psr:運(yùn)行于哪顆CPU之上;
        stat:進(jìn)程狀態(tài);
        cmd:?jiǎn)?dòng)該進(jìn)程的命令程序;
        tty:與進(jìn)程相關(guān)的終端設(shè)備;


顯示PID及其對(duì)應(yīng)的命令程序:

[root@localhost ~]# ps axo pid,cmd
  PID  CMD
    1  /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    2  [kthreadd]
    3  [ksoftirqd/0]
    5  [kworker/0:0H]
    7  [migration/0]
   .....(以下省略).....


在CentOS 7上顯示初始化程序systemd相關(guān)進(jìn)程的PID,優(yōu)先級(jí)和Nice值:

[root@loaclhost ~]# ps axo cmd,pid,priority,ni | grep systemd
/usr/lib/systemd/systemd --      1  20   0
/usr/lib/systemd/systemd-jo    601  20   0
/usr/lib/systemd/systemd-ud    640  20   0
/usr/lib/systemd/systemd-lo    846  20   0


pgrep, pkill命令:

look up or signal processes based on name and other attributes

根據(jù)名字或其他屬性查看進(jìn)程或向進(jìn)程發(fā)送信號(hào)。


命令格式:

pgrep [options] pattern
pkill [options] pattern


常用選項(xiàng):

    -u uid:effective user,顯示指定用戶運(yùn)行的進(jìn)程(運(yùn)行過(guò)程中可切換身份);

    -U uid:real user,顯示指定用戶啟動(dòng)了哪些進(jìn)程;

    -t TERMINAL:顯示與終端相關(guān)的進(jìn)程;

    -l:顯示進(jìn)程名;

    -a:顯示完整格式的進(jìn)程名;

    -P pid:顯示指定進(jìn)程的子進(jìn)程;


用法示例:

顯示進(jìn)程名中包含字符串'ssh'的進(jìn)程:

[root@localhost ~]# pgrep httpd
1982
1983
1984
1985
1986
1987
1988


顯示用戶postfix啟動(dòng)了哪些進(jìn)程:

[root@localhost ~]# pgrep -U postfix
977
14002

#檢驗(yàn):
[root@localhost ~]# ps aux | egrep '^USER|977|14002'
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postfix     977  0.0  0.3  91236  3988 ?        S    Feb13   0:00 qmgr -l -t unix -u
postfix   14002  0.0  0.3  91168  3972 ?        S    21:21   0:00 pickup -l -t unix -u
root      14184  0.0  0.0 112652   968 pts/0    S+   22:06   0:00 grep -E --color=auto ^USER|977|14002


顯示用戶postfix啟動(dòng)的進(jìn)程的PID和進(jìn)程名:

[root@localhost ~]# pgrep -U postfix -l
977 qmgr
14002 pickup


顯示用戶postfix啟動(dòng)的進(jìn)程的PID和進(jìn)程名(完整格式):

[root@localhost ~]# pgrep -U postfix -a
977 qmgr -l -t unix -u
14002 pickup -l -t unix -u


pidof命令:

find the process ID of a running program.

根據(jù)進(jìn)程名,找出相應(yīng)的PID。


用法示例:

顯示httpd對(duì)應(yīng)的PID:

[root@localhost ~]# pidof httpd
1988 1987 1986 1985 1984 1983 1982


top命令:

display Linux processes

以動(dòng)態(tài)方式查看當(dāng)前系統(tǒng)上的進(jìn)程信息;類(lèi)似于Windows上的任務(wù)管理器;以排序方式顯示,占用某種資源最多的進(jìn)程顯示在最前。


常用命令:

排序:
    P命令:以占據(jù)CPU百分比排序;(默認(rèn))
    M命令:以占據(jù)內(nèi)存百分比顯示;
    T命令:以累積占用CPU時(shí)間排序;


控制首部字段的開(kāi)啟或關(guān)閉:
    (1)uptime信息:l命令;
    (2)tasks及cpu信息:t命令;
    (3)內(nèi)存信息:m命令;
    
    
修改刷新時(shí)間間隔:s命令;
終止指定的進(jìn)程:k命令;
退出top進(jìn)程:q命令;


常用選項(xiàng):

    -d #:Delay-time interval,指定刷新時(shí)間間隔;默認(rèn)為3秒;

    -b:Batch-mode,以批次方式顯示;

    -n #:Number-of-iterations,指定顯示多少批次后退出top進(jìn)程;


用法示例:

動(dòng)態(tài)查看Linux系統(tǒng)上的進(jìn)程信息:

[root@localhost ~]# top

top - 22:40:29 up 1 day,  9:33,  2 users,  load average: 0.00, 0.01, 0.05
      
Tasks: 203 total,   2 running, 200 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999964 total,   485220 free,   185104 used,   329640 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   598852 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                            
 14293 root      20   0  157708   2284   1556 R   0.3  0.2   0:00.05 top                                                
     1 root      20   0  193628   6732   3968 S   0.0  0.7   0:29.74 systemd                                            
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.15 kthreadd                                           
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.88 ksoftirqd/0                                        
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                       
     7 root      rt   0       0      0      0 S   0.0  0.0   0:02.20 migration/0                                        
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                                             
     9 root      20   0       0      0      0 S   0.0  0.0   0:33.04 rcu_sched                                          
    10 root      rt   0       0      0      0 S   0.0  0.0   0:00.79 watchdog/0                                         
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.84 watchdog/1                                         
    12 root      rt   0       0      0      0 S   0.0  0.0   0:03.81 migration/1                                        
    13 root      20   0       0      0      0 S   0.0  0.0   0:03.32 ksoftirqd/1                                        
    15 root       0 -20       0      0      0 S   0.0  0.0   0:00.18 kworker/1:0H                                       
    16 root      rt   0       0      0      0 S   0.0             
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI