1. 河豚號 > 生活百科 >

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

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

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

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

從內(nèi)核 的層面來看,進(jìn)程由用戶內(nèi)存空間和一系列內(nèi)核數(shù)據(jù)結(jié)構(gòu)組成。其中,用戶內(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)識號IDs、虛擬內(nèi)存表、打開文件描述符表、信號傳遞及處理的相關(guān)信息、進(jìn)程資源使用和限制、當(dāng)前工作目錄、環(huán)境變量、命令行等等大量的相關(guān)信息。

1 進(jìn)程的類型

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

前臺進(jìn)程

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

后臺進(jìn)程

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

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

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

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

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

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

3. 停止Stopped,進(jìn)程已經(jīng)被停止了,通常是由于收到了一個信號,比如SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行。正在調(diào)試的進(jìn)程一般都處于這個狀態(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 如何識別進(jìn)程?

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

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

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

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

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

查找進(jìn)程 ID

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

$ pidof init

1

如果你用一個程序打開了多個實例,比如chrome打開了多個網(wǎng)頁,pid的操作畫風(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

有兩個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 后臺任務(wù)

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

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

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

ps -aux

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

ps -aux | sort -rnk 4

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

ps -aux | sort -nk 3

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

ps -ef

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

ps -ef | grep tty

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

 

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

 

pgrep命令

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

 

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

 

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

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

~$ pgrep -l -o sh

157 zswap-shrink

~$ pgrep -l -n sh

17341 gnome-screensho

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

pstree顯示進(jìn)程樹

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

 

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

 

htop

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

 

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

 

top與htop運行時,都可以按q鍵退出。

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

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

kill

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

kill -9

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

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

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

htop殺死進(jìn)程

因為系統(tǒng)進(jìn)程實在太多了,在htop中如果想殺死某個進(jìn)程,最好先F3查詢,然后再按F9殺死。

nice、renice命令

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

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

sudo nice --3 kolourpaint “kolourpaint”是一個類似于windows上的畫圖的工具軟件

 

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

 

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

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

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

$ sudo renice -n 6 -p 16217

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

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

 

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

 

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

w命令。是的這個命令就是一個“w”。用來查看登錄者的信息及他們的行為。

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

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

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

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

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

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

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

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

 

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

 

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

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

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

聯(lián)系我們

在線咨詢:點擊這里給我發(fā)消息

微信號:15705946153

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