kill 程式時遇到的一件有意思的事情
案例現象
一般來講,我們在 kill 掉一個程式的時候通常有兩個選擇:
-
找到程式的 pid 號,然後執行 kill 命令
-
找到程式的名字,然後執行 pkill 命令
pkill 和 kill 命令都是向指定的程式傳送訊號,從而完成終結程式的操作,主要區別在於 pkill 命令與 pgrep 配套使用,能夠踢出指定終端使用者、同時根據 UID 和使用者名稱來終止程式
今天給大家分享一件我在使用 pkill 命令時遇到的比較有意思的事情
這臺機器上(Cent OS7)執行著一個程式
after_sleep60s_output
執行 pkill 命令
然後當我使用 ps 命令檢視的時候,我發現這個程式還在,而且返回了狀態碼 1
用 kill 命令試試,發現成功了
奇怪?為什麼用 pkill 命令 kill 不掉這個程式?
定位問題
透過
man pkill
我發現,pkill 命令是預設結合 pgrep 來使用的
pgrep 首先找出目標程式(running),然後 pkill 再根據 pgrep 的結果來 kill 目標程式
pgrep 找目標程式是透過獲取
Linux 中的每一個程式都維護了一個
這裡面有一個欄位定義了不包括路徑的可執行檔案的名字,最大長度是 16 bytes,除去最後一個留給 null 的,就只有最多 15 個字元
/proc/[pid]/stat
檔案中的程式名來實現的,但是這個檔案中的程式名是有長度限制的——
只有15個字元struct_task_struct
結構體,這個結構體在
/usr/src/kernels/核心版本/include/linux/sched.h
裡面
然後我們看一下上面例子中程式對應的 stat 檔案
可以看到檔案裡面的程式名字被截斷成了15個字元:
after_sleep60s_
如果要使用 pkill 命令,正確方式如下:
你也可以加一個
-f
引數
這個引數會告訴 pkill 不去
/proc/[pid]/stat
檔案找程式,而是去
/proc/[pid]/cmdline
裡面找
這個檔案裡面包含了程式啟動的時候的完整命令,包括引數
解決問題
想要準確的 kill 掉一個程式,可以使用下面的方法:
-
pidof
命令獲取到程式對應的 PID,再使用kill
命令 -
使用 systemd 啟動的,透過
systemctl
命令來控制 -
使用 pkill 命令的時候建議加上
-f
引數
最後附上相關 issue 連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70028327/viewspace-2944092/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- B站正在做一件前無古人的事情
- 靠著興趣,一件一件事情來
- kill 已啟動的程式
- 高階碼農設計的程式能解耦,是多麼重要的一件事情!解耦
- 利用Python來實現報表的自動傳送,解放你時間去做更有意思的事情Python
- [20200319]KILL STATUS ='KILLED'的程式.txt
- [20211209]pdb資料庫kill job遇到的奇怪情況.txt資料庫
- 中級 Java 軟體工程師會遇到的事情Java軟體工程工程師
- 最好的程式是程式設計師在處理其他事情時編寫的程式!程式設計師
- linux 檢視程式 kill程式Linux
- 聊聊程式設計師面試時,那些必須注意的事情程式設計師面試
- 程式命令ps/top/kill
- 精通 Linux 的 “kill” 命令Linux
- 花費優秀程式設計師95%時間精力的事情 - MICHAEL JACKSON程式設計師
- 小程式 遇到的坑
- kill與pkill的區別
- kill 指令的執行原理
- linux 下根據埠kill 程式Linux
- 不需要羨慕別人的成功 他只是做了你遇到不敢做的事情而已
- 使用constexpr時遇到的小坑
- 學習Golang時遇到的似懂非懂的概念Golang
- 專訪安全容器 Kata 專案創始人王旭:開源是一件向死而生的事情
- 使用pt-kill根據一定的規則來kill連線的方法
- 遇到一點事情就想辭職的人看這裡ZAE
- 找工作時,我們應該思考的幾件事情。
- 刪除外部表時遇到的坑
- vue 克隆物件時遇到的問題Vue物件
- 使用MySQL時遇到的各種坑MySql
- 有意思、有趣的文字
- 新時代佈局中一些有意思的特性
- 關於Pyinstaller在打包Streamlit程式時遇到的IndexError:tuple index out of rangeIndexError
- 小程式使用Picker遇到的坑
- 人生短暫,持之以恆地做一件事情就會成功
- 分析一次有意思的需求——HTML程式碼注入HTML
- 為什麼說在 Android 中請求許可權從來都不是一件簡單的事情?Android
- 程式設計師面試時遇到的高深問題與入職後的工作程式設計師面試
- 對話《重生邊緣》製作人:國內做3A如苦行僧,但是一件很有意義的事情
- 如何讓老闆明白測試和測試工程師不是一件事情?工程師