進程組

進程組,每個進程組有一個領頭進程。進程組是一個或多個進程的集合,通常它們與一組作業相關聯,可以接受來自同一終端的各種信號。

基本介紹

  • 中文名:進程組
  • 名稱:進程組
  • 唯一標識:進程組由進程組ID來唯一標識
  • 領頭:領頭進程的 pid
基本信息,運行結果,

基本信息

每個進程組都有唯一的進程組ID(整數,也可以存放在pid_t類型中)。進程組由進程組ID來唯一標識。除了進程號(PID)之外,進程組ID也是一個進程的必備屬性之一。
getpgrp: 獲得進程組 id, 即領頭進程的 pid
#include <unistd.h>
pid_t getpgrp(void);
//返回值;調用進程的進程組ID

運行結果

每個進程組都有一個組長進程,組長進程的進程號等於進程組ID。組長進程可以創建一個進程組、創建該組中的進程。只要某個進程組中有一個進程存在,則該進程組就存在,與組長進程是否終止無關。從進程組創建開始到其中最後一個進程離開為止的時間區間成為進程組的生存期。進程組中最後一個進程可以終止或者轉移到另一個進程組中。
進程調用setpgid(setsid也可以)可以參加一個現存的組或者創建一個新進程組。可以是前台進程組或後台進程組。
#include <sys/types.h>
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
//返回:若成功則為0,出錯為-1
這將pid進程的進程組ID設定為pgid。如果pid是0,則使用調用者的進程ID。另外,如果pgid是0,則由pid指定的進程ID被用作為進程組ID。如果這兩個參數相等,則由pid指定的進程變成進程組組長。
一個進程只能為它自己或它的子進程設定進程組I D。在它的子進程調用了exec後,它就不再能改變該子進程的進程組I D。
在大多數作業控制shell中,在fork之後調用此函式,使父進程設定其子進程的進程組ID,然後使子進程設定其自己的進程組ID。這些調用中有一個是冗餘的,但這樣做可以保證父、子進程在進一步操作之前,子進程都進入了該進程組。否則依賴於哪一個進程先執行,就產生一個競態條件。
進程組

相關詞條

熱門詞條

聯絡我們