C

如何使用使用者的 UID 殺死所有使用者的程序

  • June 20, 2020

我想從 Linux 系統上的 shell 腳本或本機程式碼中終止特定使用者的所有正在執行的程序。

我必須閱讀 /proc 目錄並查找這些嗎?

有任何想法嗎?Linux中UID下的pid有動態映射嗎?這不是在過程中嗎?

如果沒有,那麼該列表在哪里維護?我應該從中閱讀嗎?此外,系統中所有 UID 的靜態列表在哪裡,所以我可以驗證此使用者是否存在,然後繼續殺死在其下執行的所有程序?

使用pkill -U UIDorpkill -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參數並允許數字和文本使用者說明符。

引用自:https://unix.stackexchange.com/questions/18043