1. 河豚號 > 生活百科 >

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

普通人的視角,進程就是正在運行著的程序。

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

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

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

1 進程的類型

Linux 中的進程主要分兩種類型:

前臺進程

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

后臺進程

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

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

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

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

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

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

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

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

 

Linuxt每日命令005-進程原理、查看、管理

 

3 Linux 如何識別進程?

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

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

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

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

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

查找進程 ID

可以用 pidof 命令查找某個進程的進程 ID,比如Linux上所有進程的老祖宗init 進程的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命令,可以找當前 shell 的進程 ID 以及它父進程的進程 ID。

$echo $PPID

2758 父進程ID

$ echo $$

8518 當SHELL進程D

4 后臺任務(wù)

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

 

Linuxt每日命令005-進程原理、查看、管理

 

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

 

Linuxt每日命令005-進程原理、查看、管理

 

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

 

Linuxt每日命令005-進程原理、查看、管理

 

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

 

Linuxt每日命令005-進程原理、查看、管理

 

5 在 Linux 中用shell命令查看活躍進程

ps、top,查看進程

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

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

ps -aux

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

ps -aux | sort -rnk 4

按 CPU 資源的使用量對進程進行排序

ps -aux | sort -nk 3

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

ps -ef

當然,上面的還可以用grep來過濾。

ps -ef | grep tty

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

 

Linuxt每日命令005-進程原理、查看、管理

 

pgrep命令

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

 

Linuxt每日命令005-進程原理、查看、管理

 

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

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

~$ pgrep -l -o sh

157 zswap-shrink

~$ pgrep -l -n sh

17341 gnome-screensho

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

pstree顯示進程樹

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

 

Linuxt每日命令005-進程原理、查看、管理

 

htop

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

 

Linuxt每日命令005-進程原理、查看、管理

 

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

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

kill、killall 殺死進程

kill

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

kill -9

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

killall -9 - 殺死所有同名進程

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

htop殺死進程

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

nice、renice命令

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

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

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

 

Linuxt每日命令005-進程原理、查看、管理

 

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

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

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

$ sudo renice -n 6 -p 16217

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

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

 

Linuxt每日命令005-進程原理、查看、管理

 

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

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

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

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

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

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

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

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

8 進程資源限制

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

 

Linuxt每日命令005-進程原理、查看、管理

 

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

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

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

聯(lián)系我們

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

微信號:15705946153

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