限制子进程和后代进程的数量

时间:2012-12-10 00:38:46

标签: unix fork multiprocessing filelock

我必须递归地使用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。

1 个答案:

答案 0 :(得分:1)

我怀疑最简单的事情就是使用烟斗。在fork之前创建一个管道,在写入侧写入100个字节,然后关闭写入侧。然后,每当你想要fork时,尝试从管道中读取一个字节。如果你能读取一个字节,那么fork。如果没有,那就不要了。如果允许子项进行分叉,尝试跟踪具有全局变量的总分叉数将失败,但管道将在所有后代中持续存在。