我必须递归地使用fork()
,但是将分叉进程(包括子进程和后代)的数量限制为(例如)100。考虑此代码段:
void recursive(int n) {
for(int i=0; i<n; i++) {
if(number_of_processes() < 100) {
if(fork() == 0) {
number_of_processes_minus_one();
recursive(i);
exit(0);
}
}
else
recursive(i);
}
}
如何实施number_of_processes()
和number_of_processes_minus_one()
?我必须使用IPC?我试图预先创建一个文件,在其中写入PROC_MAX
并在number_of_processes()
中锁定 - 读 - 写 - 解锁它,但它仍然会吃掉我所有的pid。
答案 0 :(得分:1)
我怀疑最简单的事情就是使用烟斗。在fork之前创建一个管道,在写入侧写入100个字节,然后关闭写入侧。然后,每当你想要fork时,尝试从管道中读取一个字节。如果你能读取一个字节,那么fork。如果没有,那就不要了。如果允许子项进行分叉,尝试跟踪具有全局变量的总分叉数将失败,但管道将在所有后代中持续存在。