1. 河豚號(hào) > 生活百科 >

linux殺死進(jìn)程命令代碼(linux命令kill結(jié)束進(jìn)程)

普通人的視角,進(jìn)程就是正在運(yùn)行著的程序。

從程序員的視角來(lái)看,認(rèn)知要復(fù)雜得多。進(jìn)程是程序正在運(yùn)行的一個(gè)實(shí)例。它由程序指令,和從文件、其它程序中讀取的數(shù)據(jù)或系統(tǒng)用戶(hù)的輸入組成。它也是應(yīng)用層運(yùn)行、占據(jù)著內(nèi)存、與內(nèi)核時(shí)常交互的動(dòng)態(tài)運(yùn)行實(shí)體。

進(jìn)程是由內(nèi)核定義的抽象的實(shí)體,內(nèi)核為進(jìn)程分配用來(lái)執(zhí)行程序的各項(xiàng)系統(tǒng)資源。

從內(nèi)核 的層面來(lái)看,進(jìn)程由用戶(hù)內(nèi)存空間和一系列內(nèi)核數(shù)據(jù)結(jié)構(gòu)組成。其中,用戶(hù)內(nèi)存空間包含了程序代碼和代碼使用的變量,內(nèi)核數(shù)據(jù)結(jié)構(gòu)用于維護(hù)進(jìn)程的狀態(tài)信息。這些記錄在內(nèi)核數(shù)據(jù)結(jié)構(gòu)的信息有:進(jìn)程標(biāo)識(shí)號(hào)IDs、虛擬內(nèi)存表、打開(kāi)文件描述符表、信號(hào)傳遞及處理的相關(guān)信息、進(jìn)程資源使用和限制、當(dāng)前工作目錄、環(huán)境變量、命令行等等大量的相關(guān)信息。

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

Linux 中的進(jìn)程主要分兩種類(lèi)型:

前臺(tái)進(jìn)程

這個(gè)也稱(chēng)為交互式進(jìn)程 – 這些進(jìn)程由終端或圖形界面啟動(dòng),響應(yīng)用戶(hù)操作。也就是說(shuō),需要用戶(hù)來(lái)啟動(dòng)這樣的進(jìn)程。雖然它們部分可以設(shè)為開(kāi)機(jī)啟動(dòng),但它們不是作為L(zhǎng)inux操作系統(tǒng)功能/服務(wù)的一部分去自動(dòng)啟動(dòng)的。

后臺(tái)進(jìn)程

也稱(chēng)為非交互式/自動(dòng)進(jìn)程, 這些進(jìn)程沒(méi)有連接到終端,它們不需要任何用戶(hù)輸入。這些進(jìn)程以系統(tǒng)級(jí)服務(wù)最多。

要提一下,在Linux中還有一個(gè)很重要的進(jìn)程,這是守護(hù)進(jìn)程deamon。其實(shí)這種deamon進(jìn)屬于程后臺(tái)進(jìn)程的特殊類(lèi)型,它們?cè)谙到y(tǒng)啟動(dòng)時(shí)啟動(dòng),并作為服務(wù)一直運(yùn)行;它們不會(huì)死亡。它們自發(fā)地作為系統(tǒng)任務(wù)啟動(dòng)(作為服務(wù)運(yùn)行)。但是,它們能被用戶(hù)通過(guò) init 進(jìn)程控制。

2 linux上進(jìn)程的4種狀態(tài)

1. 運(yùn)行Running,系統(tǒng)中的當(dāng)前進(jìn)程,或者準(zhǔn)備運(yùn)行(等待分配 CPU 單元)。

2 等待Waiting,進(jìn)程正在等待某個(gè)事件的發(fā)生或者系統(tǒng)資源

內(nèi)核也會(huì)區(qū)分兩種不同類(lèi)型的等待進(jìn)程。一種是可中斷等待進(jìn)程(interruptible waiting processes,這種是可以被信號(hào)中斷的,另一種就是不可中斷等待進(jìn)程(uninterruptible waiting processes)正在等待硬件條件,不能被任何事件/信號(hào)中斷。

3. 停止Stopped,進(jìn)程已經(jīng)被停止了,通常是由于收到了一個(gè)信號(hào),比如SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號(hào)后停止運(yùn)行。正在調(diào)試的進(jìn)程一般都處于這個(gè)狀態(tài)。

4. Zombie僵死,進(jìn)程已終止, 但是進(jìn)程表process table中仍然有它的條目,進(jìn)程描述符尚在, 直到父進(jìn)程調(diào)用wait4()系統(tǒng)調(diào)用后釋放。

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

3 Linux 如何識(shí)別進(jìn)程?

如果你沒(méi)名字,怎么讓別人叫你?同理,事物都是相通的,進(jìn)程若無(wú)標(biāo)志,Linux系統(tǒng)如何識(shí)別?

Linux 是一個(gè)多用戶(hù)、多進(jìn)程的系統(tǒng),不同的用戶(hù)能系統(tǒng)上運(yùn)行各種各樣的程序,而且同一程序有可能運(yùn)行多個(gè)進(jìn)程。比如,多人可登錄到你的Linux系統(tǒng),啟用終端tty,你個(gè)人也可以啟動(dòng)多個(gè)tty。內(nèi)核必須唯一標(biāo)識(shí)程序運(yùn)行的每個(gè)實(shí)例。

程序由它的進(jìn)程 ID(PID)和它父進(jìn)程的進(jìn)程 ID(PPID)識(shí)別的,所以進(jìn)程可分為父進(jìn)程和子進(jìn)程。

父進(jìn)程 – 這些是在運(yùn)行時(shí)創(chuàng)建其它進(jìn)程的進(jìn)程。

子進(jìn)程 – 這些是在運(yùn)行時(shí)由其它進(jìn)程創(chuàng)建的進(jìn)程。

查找進(jìn)程 ID

可以用 pidof 命令查找某個(gè)進(jìn)程的進(jìn)程 ID,比如Linux上所有進(jìn)程的老祖宗init 進(jìn)程的pid都是1:

$ pidof init

1

如果你用一個(gè)程序打開(kāi)了多個(gè)實(shí)例,比如chrome打開(kāi)了多個(gè)網(wǎng)頁(yè),pid的操作畫(huà)風(fēng)是這樣的:

$pidof chrome

8885 7610 7588 6429 5100 5085 4547 4382 4355 4307 3598 3580 3559

3546 3514 3488 3453 3447 3413 3387 3367 3359 3355 3338 3302 3286

3270 3237 3224 3158 2874 2861 2833 2806 2677 2565 2553 2550 2528

2524 2523 2512

有兩個(gè)shell命令,可以找當(dāng)前 shell 的進(jìn)程 ID 以及它父進(jìn)程的進(jìn)程 ID。

$echo $PPID

2758 父進(jìn)程ID

$ echo $$

8518 當(dāng)SHELL進(jìn)程D

4 后臺(tái)任務(wù)

從終端啟動(dòng)一個(gè)進(jìn)程,在命令的最后使用&符號(hào)做參數(shù),該進(jìn)程就被立即送進(jìn)后臺(tái)。比如下面的命令系列:

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

也可以按Ctrl + Z 暫停執(zhí)行一個(gè)程序,并把它發(fā)送到后臺(tái)(按Ctrl+Z,這樣當(dāng)前終端會(huì)給進(jìn)程發(fā)送 SIGSTOP 信號(hào)),從而暫停它的執(zhí)行;它就會(huì)變?yōu)榭臻e進(jìn)程。

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

要在后臺(tái)繼續(xù)運(yùn)行上面被暫停的命令,使用 bg 命令。接上面的例子。

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

要把后臺(tái)進(jìn)程發(fā)送到前臺(tái),使用 fg 命令以及任務(wù)的 ID,類(lèi)似:

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

5 在 Linux 中用shell命令查看活躍進(jìn)程

ps、top,查看進(jìn)程

ps 和 top 命令是兩個(gè)最為常用的進(jìn)程查看命令。這個(gè)命令的功能都很強(qiáng)大。熟悉這兩個(gè)命令的常見(jiàn)用法,是在Linux中進(jìn)行日常操作管理的基礎(chǔ)。

顯示進(jìn)程信息,包括無(wú)終端的(x)和針對(duì)用戶(hù)(u)的進(jìn)程:如USER, PID, %CPU, %MEM等

ps -aux

按內(nèi)存資源的使用量對(duì)進(jìn)程進(jìn)行排序

ps -aux | sort -rnk 4

按 CPU 資源的使用量對(duì)進(jìn)程進(jìn)行排序

ps -aux | sort -nk 3

按UID、PID、PPID、C、STIME、TTY、TIME、CMD

ps -ef

當(dāng)然,上面的還可以用grep來(lái)過(guò)濾。

ps -ef | grep tty

top命令是Linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況,類(lèi)似于Windows的任務(wù)管理器。top顯示進(jìn)程的數(shù)據(jù)包括 PID、進(jìn)程屬主、優(yōu)先級(jí)、%CPU、%memory等??梢允褂眠@些顯示數(shù)據(jù)指示出資源使用量。

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

pgrep命令

這個(gè)命令掃描當(dāng)前運(yùn)行的進(jìn)程,然后按照命令匹配條件列出匹配結(jié)果到標(biāo)準(zhǔn)輸出。對(duì)于通過(guò)名字檢索進(jìn)程號(hào)是很有用。

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

使用參數(shù)”-o“,當(dāng)匹配多個(gè)進(jìn)程時(shí),顯示進(jìn)程號(hào)最小的那個(gè)。參數(shù)”-n“則相反,顯示進(jìn)程號(hào)最大的那個(gè)。

~$ pgrep -l sh 顯示結(jié)果如上圖所示

~$ pgrep -l -o sh

157 zswap-shrink

~$ pgrep -l -n sh

17341 gnome-screensho

pgrep支持正則表達(dá)式條件,通常會(huì)與kill命令聯(lián)用,在指定條件下殺死問(wèn)題進(jìn)程。

pstree顯示進(jìn)程樹(shù)

pstrees以樹(shù)狀圖來(lái)展示進(jìn)程之間的關(guān)系,可以直觀的查看進(jìn)程父子關(guān)系。執(zhí)行時(shí)最好帶“-g”參數(shù),這樣可以顯示進(jìn)程的PID號(hào)。

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

htop

top只能顯示系統(tǒng)進(jìn)程狀況,但它不能與用戶(hù)交互。一個(gè)可以交互的是htop,這個(gè)不是系統(tǒng)自帶的,需要“sudo apt install htop”去安裝。htop通過(guò)文字圖形化地顯示每一個(gè)進(jìn)程的CPU和內(nèi)存使用量、swap使用量。使用上下光標(biāo)鍵選擇進(jìn)程,F(xiàn)7和F8改變優(yōu)先級(jí),F(xiàn)9殺死進(jìn)程。

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

top與htop運(yùn)行時(shí),都可以按q鍵退出。

6 在 Linux 中用shell命令干預(yù)躍進(jìn)程

kill、killall 殺死進(jìn)程

kill

kill命令用于發(fā)送信號(hào)來(lái)結(jié)束進(jìn)程,如果上面的命令不能殺死進(jìn)程,那么帶“-9”參數(shù)試試。

kill -9

不知道進(jìn)程PID,或者想用名字殺死進(jìn)程時(shí)候,用killall命令。

killall -9 - 殺死所有同名進(jìn)程

使用kill或killall命令前一定要小心,因?yàn)檫M(jìn)程的內(nèi)部操作有可能沒(méi)有完成,可能正在寫(xiě)入文件,你這樣咔嚓一下就給殺掉了,進(jìn)程沒(méi)來(lái)得及清理現(xiàn)場(chǎng)就game over了,有可能帶來(lái)很大風(fēng)險(xiǎn)。

htop殺死進(jìn)程

因?yàn)橄到y(tǒng)進(jìn)程實(shí)在太多了,在htop中如果想殺死某個(gè)進(jìn)程,最好先F3查詢(xún),然后再按F9殺死。

nice、renice命令

在用top、htop顯示進(jìn)程時(shí),有一列是NI,nice value,表示進(jìn)程的優(yōu)先級(jí)。進(jìn)程優(yōu)先級(jí)值的范圍從-20到19。值越低,優(yōu)先級(jí)越高。提高一個(gè)進(jìn)程的優(yōu)先級(jí),內(nèi)核會(huì)分配更多CPU時(shí)間片給這個(gè)進(jìn)程。默認(rèn)情況下,進(jìn)程以0的優(yōu)先級(jí)啟動(dòng)。

通過(guò)nice命令的幫助,用戶(hù)可以設(shè)置和改變進(jìn)程的優(yōu)先級(jí)。當(dāng)然,沒(méi)有root權(quán)限,我們不可能達(dá)到這一目的。

sudo nice --3 kolourpaint “kolourpaint”是一個(gè)類(lèi)似于windows上的畫(huà)圖的工具軟件

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

然后就可以看到優(yōu)先級(jí)為-3的kolourpaint進(jìn)程。

renice這個(gè)命令可以改變正在運(yùn)行的進(jìn)程優(yōu)先值。注意,用戶(hù)只能改變屬于他們自己的進(jìn)程的優(yōu)先值。

命令“renice -n -p PID” 改變指定進(jìn)程的優(yōu)先值,接上例,執(zhí)行

$ sudo renice -n 6 -p 16217

16217 (process ID) 舊優(yōu)先級(jí)為 -3,新優(yōu)先級(jí)為 6

用htop查看,系統(tǒng)已經(jīng)運(yùn)行的kolourpaint進(jìn)程N(yùn)I值已經(jīng)由-3變成了6。

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

7 其它一些與進(jìn)程相關(guān)的命令

w命令。是的這個(gè)命令就是一個(gè)“w”。用來(lái)查看登錄者的信息及他們的行為。

提供當(dāng)前登錄的用戶(hù)及其正在執(zhí)行的進(jìn)程的信息。顯示信息頭包含信息,如當(dāng)前時(shí)間、系統(tǒng)運(yùn)行時(shí)長(zhǎng)、登錄用戶(hù)總數(shù)、過(guò)去的1,5,15分鐘內(nèi)的負(fù)載均衡數(shù)

who命令,查看登錄服務(wù)器的用戶(hù)信息

whoami命令,顯示自己在系統(tǒng)中的用戶(hù)名

logname命令,可以顯示自己初次登錄到系統(tǒng)中的用戶(hù)名

tty命令,來(lái)查看所連接的設(shè)備或終端

last命令,查看最近1個(gè)月用戶(hù)登錄服務(wù)器的情況

8 進(jìn)程資源限制

ulimit命令,用來(lái)查看進(jìn)程在系統(tǒng)上的資源限制。“ulimit -a“顯示當(dāng)前用戶(hù)關(guān)聯(lián)的資源限制。

 

Linuxt每日命令005-進(jìn)程原理、查看、管理

 

該命令用于控制系統(tǒng)資源在shell和進(jìn)程上的分配量。對(duì)于一般人員沒(méi)有啥價(jià)值,反正你也不會(huì)要求太多的資源。但對(duì)系統(tǒng)管理員來(lái)說(shuō)可是不一樣,真正的大系統(tǒng),資源管理量巨大。這個(gè)命令可以管理員,管理重度使用和存在性能問(wèn)題的系統(tǒng)。限制資源大小,確保重要進(jìn)程持續(xù)運(yùn)行,調(diào)整其他進(jìn)程不會(huì)占用過(guò)多資源。

Linux關(guān)于進(jìn)程的命令非常豐富,且很多命令參數(shù)眾多,功能強(qiáng)大,并且多個(gè)命令可以用管道、重定向等方式來(lái)組合實(shí)用。這里也只能是一個(gè)簡(jiǎn)介而已。

本文由網(wǎng)上采集發(fā)布,不代表我們立場(chǎng),轉(zhuǎn)載聯(lián)系作者并注明出處:http://www.webhosting0.com/shbk/39463.html

聯(lián)系我們

在線咨詢(xún):點(diǎn)擊這里給我發(fā)消息

微信號(hào):15705946153

工作日:9:30-18:30,節(jié)假日休息