我必须递归使用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。
我怀疑最简单的事情就是使用管道。 在分叉任何内容之前,请创建管道,将 100 字节写入写入端,然后关闭写入端。 然后,尝试在要分叉时从管道中读取一个字节。 如果您能够读取一个字节,则分叉。 如果没有,那就不要。 如果允许子分叉,则尝试使用全局变量跟踪分叉总数将失败,但管道将在所有后代中持续存在。