所以我想生成一些等于从命令行输入的值的子进程。我有所有的价值观和一切阅读都很好,我只需要弄清楚如何产生这些孩子,并让他们都调用相同的程序。
这是我到目前为止所做的:
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
是进程数。
非常感谢任何帮助!
答案 0 :(得分:1)
您是否考虑过exec
家庭? Exec
将生成进程。然后,您可以使用wait
来监控进程。 fork
将为您提供PID,然后您可以在调用wait
的每个pid上进行第二个线程循环,并跟踪每个活动进程。
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
}