如何使用使用者的 UID 殺死所有使用者的程序
我想從 Linux 系統上的 shell 腳本或本機程式碼中終止特定使用者的所有正在執行的程序。
我必須閱讀 /proc 目錄並查找這些嗎?
有任何想法嗎?Linux中UID下的pid有動態映射嗎?這不是在過程中嗎?
如果沒有,那麼該列表在哪里維護?我應該從中閱讀嗎?此外,系統中所有 UID 的靜態列表在哪裡,所以我可以驗證此使用者是否存在,然後繼續殺死在其下執行的所有程序?
使用
pkill -U UID
orpkill -u UID
或 username 代替 UID。有時skill -u USERNAME
可能會起作用,另一個工具是killall -u USERNAME
.Skill是 linux 特有的,現在已經過時了,pkill更便攜(Linux、Solaris、BSD)。
pkill 允許數字和符號 UID,有效和真實http://man7.org/linux/man-pages/man1/pkill.1.html
pkill - … 基於名稱和其他屬性的信號程序
-u, --euid euid,... Only match processes whose effective user ID is listed. Either the numerical or symbolical value may be used. -U, --uid uid,... Only match processes whose real user ID is listed. Either the numerical or symbolical value may be used.
技能手冊頁說它只允許使用使用者名,而不是使用者 ID: http: //man7.org/linux/man-pages/man1/skill.1.html
技能,嗅覺……這些工具已經過時且不可移植。命令語法定義不明確。考慮使用 killall、pkill
-u, --user user The next expression is a username.
killall 在 Linux 中沒有被標記為過時的,但它也不適用於數字 UID;只有使用者名:http: //man7.org/linux/man-pages/man1/killall.1.html
killall - 按名稱殺死程序
-u, --user Kill only processes the specified user owns. Command names are optional.
我認為,任何用於在 Linux/Solaris 樣式 /proc (procfs) 中查找程序的實用程序都將使用完整的程序列表(執行一些 readdir of
/proc
)。我認為,他們將遍歷/proc
數字子文件夾並檢查每個找到的程序是否匹配。要獲取使用者列表,請使用
getpwent
(每次呼叫將獲得一個使用者)。Skill (procps & procps-ng) 和killall (psmisc) 工具都使用
getpwnam
庫呼叫來解析-u
選項的參數,並且只會解析使用者名。pkill
(procps & procps-ng)使用 atol 和 getpwnam來解析-u
/-U
參數並允許數字和文本使用者說明符。