鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)五十二天----刪除進(jìn)程 kill 命令
shell 學(xué)習(xí)四十一天----列出文件 ls 和 od 命令
shell 學(xué)習(xí)小結(jié)
shell 學(xué)習(xí)第二十八天----case 語句
shell 學(xué)習(xí)四十四天----尋找文件
shell 學(xué)習(xí)三十五天----波浪號(hào)展開與通配符
shell 學(xué)習(xí)三十八天----執(zhí)行順序和 eval
shell 學(xué)習(xí)四十八天----文件校驗(yàn)和匹配
shell 學(xué)習(xí)四十天----awk 的驚人表現(xiàn)
shell 學(xué)習(xí)第十一天----sed 正則的精確控制
shell 學(xué)習(xí)第十七天----awk 命令
shell 學(xué)習(xí)三十九天----內(nèi)建命令
shell 學(xué)習(xí)四十五天----xargs
shell 學(xué)習(xí)三十七天----引用
shell 學(xué)習(xí)第十六天----join 練習(xí)
shell 學(xué)習(xí)第二十四天----提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第九天----分組
shell 學(xué)習(xí)第五天----基本的 I/O 重定向
shell 學(xué)習(xí)第十五天----使用 cut 選定字段
shell 學(xué)習(xí)四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)第八天----擴(kuò)展正則表達(dá)式 (ERE)
shell 學(xué)習(xí)第十九天----文本塊排序
shell 學(xué)習(xí)第二十一天----重新格式化段落
shell 學(xué)習(xí)三十六天----命令替換
shell 學(xué)習(xí)第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)四十二天----使用 touch 更新文件時(shí)間
shell 學(xué)習(xí)五十一天----top 命令查看進(jìn)程列表
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)五十四天----進(jìn)程系統(tǒng)調(diào)用的追蹤 strace
shell 學(xué)習(xí)五十天----查看進(jìn)程 ps 命令
shell 學(xué)習(xí)第二十七天----退出狀態(tài)和 if 語句
shell 學(xué)習(xí)第二十三天----打印
shell 學(xué)習(xí)三十三天----關(guān)于重定向
shell 學(xué)習(xí)四十九天----進(jìn)程建立
shell 學(xué)習(xí)第三十天----break,continue,shift,getopts
shell 學(xué)習(xí)五十五天----進(jìn)程記賬
shell 學(xué)習(xí)總結(jié)一
shell 學(xué)習(xí)第二十六天----變量與算數(shù)
shell 學(xué)習(xí)第二十二天----計(jì)算行數(shù), 字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)五十八天----/proc 文件系統(tǒng)
shell 學(xué)習(xí)第二十五天----神器的管道符
shell 學(xué)習(xí)第三十二天----read 讀取一行
sheel 學(xué)習(xí)第三天
shell 學(xué)習(xí)----小結(jié)
shell 學(xué)習(xí)第十八天----文本排序
shell 學(xué)習(xí)第三十一天----函數(shù)問題
shell 學(xué)習(xí)第十天----sed 查找與替換
shell 學(xué)習(xí)四十三天----臨時(shí)性文件的建立與使用
shell 學(xué)習(xí)四十七天----文件比較 cmp,diff,patch
shell 學(xué)習(xí)三十四天----printf 詳解
shell 學(xué)習(xí)五十七天 ----linux 任務(wù)管理,針對(duì)上一講的總結(jié)和擴(kuò)展
shell 學(xué)習(xí)第六天----小結(jié)
shell 學(xué)習(xí)第十三天----sed 案例分析
shell 學(xué)習(xí)第七天----基礎(chǔ)正則表達(dá)式 (BRE)
shell 學(xué)習(xí)第十二天----行與字符串
shell 學(xué)習(xí)小結(jié)四
shell 學(xué)習(xí)第二十九天----循環(huán)
shell 學(xué)習(xí)五十二天----刪除進(jìn)程 kill 命令
shell 學(xué)習(xí)五十六天----延遲進(jìn)程調(diào)度
shell 學(xué)習(xí)第四天----華麗的 printf 輸出
shell 學(xué)習(xí)第十五天----join 連接字段
shell 學(xué)習(xí)完結(jié)篇----希望你能看到
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)五十三天----捕獲信號(hào) trap

shell 學(xué)習(xí)五十二天----刪除進(jìn)程 kill 命令

進(jìn)程的控制與刪除

使用 kill 命令可以終止進(jìn)程。通常,終止一個(gè)前臺(tái)進(jìn)程可以使用 ctrl+C 鍵,但是對(duì)于一個(gè)后臺(tái)進(jìn)程就必須使用 kill 命令來終止,我們需要先使用 ps/pidof/pstree/top 等工具獲取進(jìn)程 PID,然后使用 kill 命令來殺掉進(jìn)程。kill 命令是通過向進(jìn)程發(fā)送指定的信號(hào)來結(jié)束相應(yīng)進(jìn)程的。在默認(rèn)情況下,采用編號(hào)為 15 的 TREM 信號(hào)。TERM 信號(hào)將終止所有不能獲取該信號(hào)的進(jìn)程。對(duì)于那些可以獲取該信號(hào)的進(jìn)程就要用編號(hào)為 9 的 kill 信號(hào),強(qiáng)行 “殺掉” 該進(jìn)程。

kill 命令詳解

  1. 格式:
    kill [參數(shù)] [進(jìn)程號(hào),也就是 PID]

  2. 功能:
    發(fā)送指定的信號(hào)到相應(yīng)進(jìn)程。不指定型號(hào)將發(fā)送 SIFTERM(15) 終止指定進(jìn)程。如果無法終止該進(jìn)程可以使用“-KILL”參數(shù),其發(fā)送的信號(hào)為 SIGKILL(9),將強(qiáng)制結(jié)束進(jìn)程,使用 ps 命令或者 jobs 命令可以查看進(jìn)程號(hào)。root 用戶將影響用戶的進(jìn)程,非 root 用戶只能影響自己的進(jìn)程。

  3. 參數(shù) ```參數(shù) 說明 -l(小寫字母) 信號(hào),如果不加信號(hào)的編號(hào)參數(shù),則使用”-l” 參數(shù)會(huì)列出全部的信號(hào)名稱 -a 當(dāng)初李當(dāng)前進(jìn)程是,不限制命令名或進(jìn)程號(hào)的對(duì)應(yīng)關(guān)系 -p 指定 kill 命令只打印相關(guān)進(jìn)程的進(jìn)程號(hào),而不發(fā)送任何信號(hào) -s 指定發(fā)送信號(hào) -u 指定用戶

注意:

  1. kill 命令可以帶信號(hào)號(hào)碼選項(xiàng),也可以不帶。如果沒有信號(hào)好嗎,kill 命令就會(huì)發(fā)出終止信號(hào) (15),這個(gè)信號(hào)可以被進(jìn)程捕獲,是的進(jìn)程在推出之前可以清理并釋放資源。也可以用 kill 向進(jìn)程發(fā)送特定的信號(hào)。例如: kill -2 123 // 它的效果等同于在前臺(tái)運(yùn)行 PID 為 123 的進(jìn)程同時(shí)按下 Ctrl+C 鍵。但是,普通用戶只能使用不帶 signal 參數(shù)的 kill 命令或最多使用 -9 信號(hào)。

  2. kill 可以帶有進(jìn)程 ID 號(hào)作為參數(shù)。當(dāng)用 kill 想這些進(jìn)程發(fā)送信號(hào)時(shí),必須是這些進(jìn)程的主人。如果試圖撤銷一個(gè)沒有撤銷權(quán)限的進(jìn)程或撤銷一個(gè)不存在的進(jìn)程,就會(huì)得到一個(gè)錯(cuò)誤信息。

  3. 可以向多個(gè)進(jìn)程發(fā)信號(hào)或終止它們。

  4. 當(dāng) kill 成功的發(fā)送了信號(hào)后,shell 會(huì)在屏幕上顯示出進(jìn)程的終止信息。有時(shí)這個(gè)信息不會(huì)馬上顯示,只有當(dāng)按下 Enter 鍵使 shell 的命令提示符再次出現(xiàn)時(shí),才會(huì)顯示出來。

  5. 應(yīng)注意,信號(hào)使進(jìn)程強(qiáng)行終止,這常會(huì)帶來一些副作用,如數(shù)據(jù)丟失后者終端無法恢復(fù)到正常狀態(tài)。發(fā)送信號(hào)時(shí)必須小心,只有在萬不得已時(shí),采用 kill 信號(hào) (9),因?yàn)檫M(jìn)程不能首先捕獲它要撤銷所有的后臺(tái)作業(yè),可以輸入 kill 0。因?yàn)橛行┰诤笈_(tái)運(yùn)行的命令會(huì)啟動(dòng)多個(gè)進(jìn)程,跟蹤并找到所有要?dú)⒌舻倪M(jìn)程的 PID 是件很麻煩的事。這時(shí),使用 kill 0 來終止所有當(dāng)前 shell 啟動(dòng)的進(jìn)程,是個(gè)有效的方法。

案例

案例 1:
```#kill -l // 列出所有的信號(hào)名稱 在輸出中,只有第 9 種信號(hào) (SIGKILL) 才可以無條件終止進(jìn)程,其他信號(hào)進(jìn)程都有權(quán)利忽略。以下是常用的信號(hào): 信號(hào)名稱 編號(hào) 說明 HUP 1 終端斷線 INT 2 中斷 (同 Ctrl+C) QUIT 3 退出 (同 Ctrl) TERM 15 終止 KILL 9 強(qiáng)制終止 CONT 18 繼續(xù) (與 STOP 相反,fg/bg 命令) STOP 19 暫停 (同 Ctrl+Z)


案例 2:得到指定信號(hào)的數(shù)值 (不區(qū)分大小寫)  
```\#kill -l term
15
\#kill -l kill
9
\#kill -l SIGKILL

案例 3:配合 ps 命令,使用 kill 殺掉進(jìn)程
```#ps -ef | grep vim // 得到關(guān)于 vim 進(jìn)程的 PID,比如得到的 PID 是 111 #kill 111 // 刪除 vim 進(jìn)程



案例 4:徹底殺死進(jìn)程  
`\#kill -9 111`

案例 5:殺死指定用戶的所有進(jìn)程  
```\#kill -9 $(ps -ef| grep username)   // 方法 1
\#kill -u username // 方法 2```

案例 6:init 進(jìn)程 (PID 為 1) 是不可殺的  
`\#kill -9 1`

這是因?yàn)?`init` 是 linux 系統(tǒng)中不可缺少的程序之一 。所謂的 `init` 進(jìn)程,他是一個(gè)有內(nèi)核啟動(dòng)的用戶級(jí)進(jìn)程。內(nèi)核自行啟動(dòng) (已經(jīng)被載入內(nèi)存,開始運(yùn)行,并已初始化所有的設(shè)備驅(qū)動(dòng)程序和數(shù)據(jù)結(jié)構(gòu)等) 之后,就通過啟動(dòng)一個(gè)用戶級(jí)程序 `init` 的方式,完成引導(dǎo)進(jìn)程。所以,`init` 時(shí)鐘是第一個(gè)進(jìn)程 (其進(jìn)程編號(hào)始終為 1)。其他所有進(jìn)程都是 `init` 進(jìn)程的子孫。`init` 進(jìn)程是不可殺死的。不夠貌似 `init` 進(jìn)程的作用正在被逐漸弱化。