【问题标题】:Spawn multiple children processes产生多个子进程
【发布时间】:2013-09-27 18:17:16
【问题描述】:

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

这是我目前所拥有的:

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(),然后一次处理其余的孩子5。

示例输入:

run -p 60 10

其中 -p 是要馈送到 gambler.c 的百分比,它仅根据随机数生成器返回成功或失败。 60 是百分比。 10 是进程数。

非常感谢任何帮助,谢谢!

【问题讨论】:

    标签: c process exec fork


    【解决方案1】:

    你调查过exec 家族吗? Exec 将产生进程。然后您可以使用wait 来监控进程。 fork 将为您提供 PID,然后您可以在每个 pid 上进行第二个线程循环,调用 wait 并跟踪每个活动进程。

    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
    }
    

    【讨论】:

    • 使用exec时,是否需要像上面那样设置pid = fork()?还是 exec 会自动创建我需要的所有这些进程?
    • Exec 替换当前进程空间。所以你仍然需要分叉。
    • 呃...我忘记了 XP。好的。所以我调用 fork 一次,而不是循环调用。但是,如果我在循环中调用 exec,它会每次都给出新的 pid 吗?还是会发送相同的“x”次垃圾邮件?
    • 每次启动进程时,您都需要 fork 然后执行。
    • fork之后,要检查自己是父进程还是子进程。然后子进程应该调用 exec 并且父进程继续执行它的工作。
    猜你喜欢
    • 2013-11-22
    • 2012-03-27
    • 1970-01-01
    • 2012-02-16
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2012-04-06
    相关资源
    最近更新 更多