原文鏈接:https://blog.csdn.net/nightmare_dimple/article/details/86663113
1.進(jìn)程資源監(jiān)控
1.1 gnome-system-monitor
gnome-system-monitor是Ubuntu系統(tǒng)自帶的資源管理器,可以讓我們?cè)诮缑嬷袆?dòng)態(tài)查看所有進(jìn)程資源以及計(jì)算內(nèi)存消耗情況,可直接在命令行中輸入gnome-system-monitor:
可以看見,以上內(nèi)容能夠很容易幫我們監(jiān)控系統(tǒng)資源,但是如果我們需要將監(jiān)控級(jí)別設(shè)定到指定程序級(jí)別,則需要對(duì)該界面進(jìn)行相關(guān)配置:
左上角顯示設(shè)置
我們可以通過左上角的按鈕查詢指定程序的進(jìn)程號(hào),也可以顯示出每一個(gè)進(jìn)程的執(zhí)行命令行信息:
右上角篩選設(shè)置
默認(rèn)顯示的是當(dāng)前用戶所有的進(jìn)程信息,但如果想知道當(dāng)前活躍的進(jìn)程信息,并顯示父子進(jìn)程的依賴關(guān)系,我們可以通過右上角按鈕選擇:
1.2 top
top也是Ubuntu系統(tǒng)自帶的一個(gè)系統(tǒng)資源監(jiān)控指令,同樣是在命令行執(zhí)行:
其中上方的%Cpu的意義如下:
us — 用戶空間占用CPU的百分比。
sy — 內(nèi)核空間占用CPU的百分比。
ni — 改變過優(yōu)先級(jí)的進(jìn)程占用CPU的百分比
id — 空閑CPU百分比
wa — IO等待占用CPU的百分比
hi — 硬中斷(Hardware IRQ)占用CPU的百分比
si — 軟中斷(Software Interrupts)占用CPU的百分比
1
2
3
4
5
6
7
而下方的則是各個(gè)進(jìn)程的詳細(xì)信息,其中要注意的是:
PID: 進(jìn)程號(hào)
USER: 進(jìn)程所有者
PR: 進(jìn)程優(yōu)先級(jí)
VIRT: 進(jìn)程所占虛擬內(nèi)存大小,單位:B
RES: 進(jìn)程所占物理內(nèi)存大小,單位:B
SHR: 進(jìn)程所占共享內(nèi)存大小,單位:B
%CPU: 進(jìn)程所占CPU使用率
%MEM:進(jìn)程所占內(nèi)存使用率
TIME+: 進(jìn)程啟動(dòng)后所占總的CPU時(shí)間
COMMAND: 進(jìn)程命令名
1
2
3
4
5
6
7
8
9
10
特別的,鍵盤按下1會(huì)顯示所有核的信息,按下q會(huì)退出當(dāng)前窗口。
1.3 htop
htop相對(duì)top來說,是一個(gè)更加清晰的系統(tǒng)資源監(jiān)控器,不過需要先安裝:
sudo apt install htop
1
同樣在命令行執(zhí)行:
2.利用進(jìn)程號(hào)關(guān)閉進(jìn)程
指定進(jìn)程號(hào),如果要關(guān)閉其對(duì)應(yīng)進(jìn)程,只需要執(zhí)行:
kill 進(jìn)程號(hào)
kill -15 進(jìn)程號(hào)
1
2
以上兩種方式會(huì)關(guān)閉正在執(zhí)行的進(jìn)程,不過依然會(huì)有部分程序會(huì)延時(shí)相應(yīng),或者不相應(yīng),所以我們可以強(qiáng)制關(guān)閉:
kill -9 進(jìn)程號(hào)
1
進(jìn)程號(hào)一定要填,不然默認(rèn)關(guān)閉所有進(jìn)程,包括我們的系統(tǒng)進(jìn)程。
3.利用程序名關(guān)閉進(jìn)程
3.1 直接關(guān)閉
Ubuntu提供了直接關(guān)閉進(jìn)程的指令killall和pkill:
killall 進(jìn)程名
pkill 進(jìn)程名
1
2
不過這兩個(gè)方法有三個(gè)缺點(diǎn):
進(jìn)程名指的是執(zhí)行命令的名稱,并不是命令行,即:
python test.py =>python
1
進(jìn)程名如果超過15個(gè)字符會(huì)自動(dòng)截?cái)啵?/p>
killall bt_uinfo_memcached x
killall bt_uinfo_memcac √
1
2
對(duì)于圖形界面等關(guān)閉不了,因?yàn)閷儆趖ty,不屬于command。
3.2 先查找再關(guān)閉
我們?cè)诘谝徽陆榻Bgnome-system-monitor時(shí),提到其自帶查找進(jìn)程號(hào)的功能,即search for open files;
Ubuntu提供了一種簡單完全匹配工具pidof:
pidof 進(jìn)程名
1
注意這里的進(jìn)程名必須是完整的名稱,如:python。
Ubuntu還提供了命令行工具進(jìn)行查找:
ps -e | grep 進(jìn)程名
ps -ef | grep 進(jìn)程名
1
2
我們可以看到,僅僅-e所能匹配的進(jìn)程不全,但是-ef能匹配更詳細(xì)的命令行信息,更重要的是這種方式不是完整匹配,而是部分匹配。
對(duì)于ps -e,Ubuntu提供了更簡潔的用法:
pgrep 進(jìn)程名
pgrep -a 進(jìn)程名
1
2
pgrep的缺點(diǎn)在于,無法實(shí)現(xiàn)ps -ef的命令行匹配功能,其優(yōu)點(diǎn)在于可以只打印進(jìn)程號(hào),方便后續(xù)關(guān)閉。
我們?nèi)绻认霌碛衟grep那樣直接打印進(jìn)程號(hào)的簡潔,又想擁有ps -ef |grep方式匹配完整命令行的強(qiáng)大,可以利用awk語言編程實(shí)現(xiàn),利用進(jìn)程號(hào)在第二列的特性:
ps -ef | grep 進(jìn)程信息 |awk '{print $2}'
1
有了這些進(jìn)程的查找方式,那么關(guān)閉進(jìn)程就很容易了,那么,如果我們想要一次性執(zhí)行查找和關(guān)閉怎么辦?可以利用xargs命令:
pidof python |xargs kill -9
pgrep python |xags kill -9
ps -ef |grep python |awk '{print $2}'|xargs kill -9
1
2
3
4.利用python關(guān)閉進(jìn)程
4.1 os系統(tǒng)指令
python自身可以利用os模塊的system功能執(zhí)行命令行指令,如:
os.system('kill -9 進(jìn)程號(hào)')
1
另外Python也可以獲取自身程序的進(jìn)程號(hào):
os.getpid()
1
4.2 psutil庫
psutil庫能夠輕松實(shí)現(xiàn)獲取系統(tǒng)運(yùn)行的進(jìn)程和系統(tǒng)利用率(包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等)信息,它主要用來做系統(tǒng)監(jiān)控,性能分析,進(jìn)程管理。其安裝方式如下:
pip install psutil
1
這里我不介紹其詳細(xì)功能,只介紹如何利用其關(guān)閉特定進(jìn)程。
獲取當(dāng)前系統(tǒng)所有進(jìn)程:
psutil.pids()
1
返回所有進(jìn)程號(hào)列表。
獲取每個(gè)進(jìn)程的詳細(xì)信息:
psutil.Process(進(jìn)程號(hào))
1
返回的是該進(jìn)程所對(duì)應(yīng)的類,通過觀察其屬性可見,有很多信息可以利用:
那么我們可以這樣進(jìn)行匹配,假如我們要關(guān)閉包含train字樣的python進(jìn)程,那么可以:
import psutil
import os
for i in psutil.pids():
try:
p = psutil.Process(i)
if p.name() == 'python' and 'train' in ''.join(p.cmdline()):
os.system('kill -9 '+str(i))
except Exception:
pass
1
2
3
4
5
6
7
8
9
之所以要加入保護(hù),是因?yàn)檫M(jìn)程隨時(shí)都處于啟動(dòng)和關(guān)閉狀態(tài),有的進(jìn)程可能在處理過程中關(guān)閉了。