1. 程式人生 > 其它 >殺死程序組內所有程序

殺死程序組內所有程序

技術標籤:linuxc

程序組

概念
    在 linux 中,程序不但有自己的 id 號,還會有一個組 id 號。我們把擁有相同組 id 號的程序的集合稱為一個程序組。
傳送訊號給程序和程序組
使用 kill -n -pgid 可以將訊號 n 傳送到程序組 pgid 中的所有程序。例如命令 kill -9 -4115 表示殺死程序組 4115 中的所有程序
使用kill  -n pid 可以將訊號n傳送到指定pid程序。
程序組的生命週期
從程序組被建立開始,到組內所有程序終止或者離開。
程序組組長
程序組組長是程序組中的某一個程序。該程序的程序號等於程序組的程序號。需要注意的是,程序組可以沒有組長。如程序 ps_swing,它的程序組組長 4239 已經被 kill 掉,但是程序組中的其它程序仍然存在。

程序組的建立與設定

// 獲取程序 pid 的程序組 id.
pid_t getpgid(pid_t pid);

// 指定 pid 為程序組組長或將 pid 加入到組 pgid.
int setpgid(pid_t pid, pid_t pgid);
新建程序組

將某一個程序指定為組長,就建立了一個新的程序組。相當於呼叫 setpgid(pid, pid),即將程序 pid 設定為程序組組長,同時建立程序組 pid.

將程序新增到程序組

將某個程序新增到已存在的程序組,可以使用 setpgid(pid, pgid).

注意:在使用上面的函式時,必須保證呼叫者程序、被設定的程序以及要新增的程序組屬於同一個會話,否則會出現許可權錯誤。在這裡,“會話”這個概念可以暫時理解為同一個終端。

這也就是說,倘若你在你的終端中去設定其它終端的程序組,會失敗。
命令 ps ajx 可以檢視程序的 pid,
gid, sid 等相關屬性。