程序 程序組

2021-09-13 21:52:02 字數 2881 閱讀 1206

1. 程序組

(1)程序組,也稱之為作業,bsd與2023年前後向unix中增加的乙個新特性,代表乙個或多個程序的集合。每個程序都屬於乙個程序組,在waitpid函式和kill函式的引數中都曾經使用到,作業系統設計的程序組的概念,是為了簡化對多個程序的管理。

當父程序建立子程序的時候,預設子程序與父程序屬於同乙個程序組,程序組id等於程序組第乙個程序id(組長程序)。所以,組長程序標識:其程序組id等於其程序id.

組長程序可以建立乙個程序組,建立該程序組的程序,然後終止,只要程序組中有乙個程序存在,程序組就存在,與組長程序是否終止無關。

(2)kill傳送給程序組

使用 kill -n -pgid 可以將訊號 n 傳送到程序組 pgid 中的所有程序。例如命令 kill -9 -4115 表示殺死程序組 4115 中的所有程序。

2. getpgid、getpgrp函式原型:

pid_t getpgrp(void);

pid_t getpgid(pid_t pid);

分析:

3. setpgid函式函式原型:改變程序預設所屬的程序組,通常可用來加入乙個現有的程序組或新程序組。

int setpgid(pid_t pid, pid_t pgid);
分析:將引數1對應的程序,加入引數2對應的程序組中。

注意:4. 測試**:

#include #include #include int main()

else if (pid == 0) //子程序

else if (pid > 0) //父程序

return 0;

}

輸出結果:

1. 實驗一:

題目:利用程序扇完成乙個小實驗。該程序扇有 1 個父程序和 3 個子程序,我們希望達到圖 1 中的效果,即將程序 0 (父程序)和程序 1 設定成一組,假設為組 1,將程序 2 和 程序 3 設定成另乙個組,假設為組 2. 另外,我們希望程序 0 和程序 2 分別是這兩個組的組長。   

1. 測試**:

#include #include #include #include #include int main() 

else if (i == 2)

else if (i == 3)

break;

}else if (pid < 0)

}printf("程序 %d, pid: %d -> ppid: %d, pgid: [%d], (%s)\n", i % 4, getpid(), getppid(), getpgid(getpid()), strerror(errno));

while (1) sleep(1);

return 0;

}

輸出結果: 

測試**:

#include #include #include #include int main(void)

else if(pid > 0)

if(i == 2)

setpgid(pid, group2);

}else

if(i == 2)

setpgid(getpid(), group2);

break;}}

printf("pid:%d, ppid:%d, pgid:%d\n", getpid(), getppid(), getpgid(getpid()));

for(int i = 0; i < 3; ++i)

wait(0);

return 0;

}

輸出結果:

2. 實驗二:

題目:利用程序扇完成乙個小實驗。該程序扇有 1 個父程序和 3 個子程序,我們希望達到圖 1 中的效果,即將程序 0 (父程序)和程序 1 設定成一組,假設為組 1,將程序 2 和 程序 3 設定成另乙個組,假設為組 2. 另外,我們希望程序 0 和程序 2 分別是這兩個組的組長。

測試**:

#include #include #include #include #include int main() 

else if (i == 1)

else if (i == 2)

break;

}

else if (pid == 0) //子程序

else if (i == 1)

else if (i == 2)

}

else if (pid < 0)

} printf("程序 %d, pid: %d -> ppid: %d, pgid: [%d]\n", i, getpid(), getppid(), getpgid(getpid()));

while(1) sleep(1);

return 0;

}

程序 程序組 會話

1.程序組 每個程序屬於乙個程序組,程序組是乙個或多個程序的集合,每個程序有乙個唯一的程序組id。獲取程序組的兩個函式 include pid t getpgrp void pid t getpgrp pid t pid 程序組可以有乙個組長程序,組長程序的標識是,其程序組id等於其程序id。程序組...

孤兒程序 孤兒程序組 守護程序

1.孤兒程序的定義 定義1 該程序組的每個成員的父程序要麼是該組的成員,要麼在其它會話中。定義2 乙個程序不是孤兒程序組的條件是 該組有乙個程序,其父程序在屬於同一會話的另乙個組中。只要能夠滿足上面其中的任乙個定義,則此程序組就是孤兒程序組。可能讀起來比較拗口,看圖 1 中的例子可能會清楚點。圖 1...

會話 程序組 程序個人理解

1 程序必定屬於乙個程序組,也只能屬於乙個程序組。乙個程序組中可以包含多個程序。程序組的生命週期從被建立開始,到其內所有程序終止或離開該組。獲取當前程序所在程序組id使用函式getpgrp 建立或加入其他組使用函式setpgid 2 假設條件 pid1程序屬於pgid1程序組 pid2屬於pgid2...