1. 程序組
(1)程序組,也稱之為作業,bsd與2023年前後向unix中增加的乙個新特性,代表乙個或多個程序的集合。每個程序都屬於乙個程序組,在waitpid函式和kill函式的引數中都曾經使用到,作業系統設計的程序組的概念,是為了簡化對多個程序的管理。2. getpgid、getpgrp函式原型:當父程序建立子程序的時候,預設子程序與父程序屬於同乙個程序組,程序組id等於程序組第乙個程序id(組長程序)。所以,組長程序標識:其程序組id等於其程序id.
組長程序可以建立乙個程序組,建立該程序組的程序,然後終止,只要程序組中有乙個程序存在,程序組就存在,與組長程序是否終止無關。
(2)kill傳送給程序組
使用 kill -n -pgid 可以將訊號 n 傳送到程序組 pgid 中的所有程序。例如命令 kill -9 -4115 表示殺死程序組 4115 中的所有程序。
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...