产生多个子进程

时间:2013-09-27 18:17:16

标签: c process exec fork

所以我想生成一些等于从命令行输入的值的子进程。我有所有的价值观和一切阅读都很好,我只需要弄清楚如何产生这些孩子,并让他们都调用相同的程序。

这是我到目前为止所做的:

for(int i = 0; i < processes; i++)
{
    pid = fork();
    printf("%d\n", pid);
}

if(pid < 0)
{
perror("fork");
exit(-1);

}

else if(pid == 0)
{

    /*for(int j = 0; j <= 5; j++)
    {
        execl("~/cs370/PA2/gambler.c","run", NULL);
        Gamble(percent);
    }*/

}

所以要再次明确。我希望产生"processes"个孩子,这些孩子都会调用"gambler.c"。但是一次只能运行5个。它应该wait(),然后一次处理其余的孩子。

示例输入:

run -p 60 10

其中-p是要输入到gambler.c的百分比,它只是基于随机数生成器返回成功或失败。 60是百分比。 10是进程数。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您是否考虑过exec家庭? Exec将生成进程。然后,您可以使用wait来监控进程。 fork将为您提供PID,然后您可以在调用wait的每个pid上进行第二个线程循环,并跟踪每个活动进程。

wait man page

exec man page

pid_t pid = fork()
if (pID == 0)
{
     //child
     //immediatly call whichever exec you need.  Do not do anything else.
     //do not log a message or print a string.  Any calls to c++ standard strings
     //will risk deadlocking you.
}
else if (pid < 0)
{
   //error
} 
else
{
   //parent.  store pid for monitoring
}