我希望有人可以解释如何让父母等待所有子进程完成后再继续fork之后.我有清理代码,我想运行,但子进程需要返回才能发生这种情况.
for (int id=0; id<n; id++) {
if (fork()==0) {
// Child
exit(0);
} else {
// Parent
...
}
...
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个用于构建一个简单shell的任务,我正在尝试添加一些不需要的功能,但我遇到了管道问题.
一旦我的命令被解析,我就分叉一个进程来执行它们.如果只剩下一个命令,则此进程是执行命令的子例程,否则将执行fork.父级将执行第一个命令,子级将处理其余命令.管道已设置并正常工作.
然后我的主进程调用wait(),然后输出提示.当我执行类似的命令时ls -la | cat,在cat的输出之前打印提示.
我尝试wait()为每个应该执行的命令调用一次,但第一次调用有效,所有后续调用都返回ECHILD.
我如何强迫我的主线等待所有孩子,包括孩子的孩子,退出?
我正在编写一个程序,它使用cpu power来处理一些信息.该程序取决于CPU核心.如果有2个内核,程序将fork()两次以创建2个工作实例并返回结果.
#define CORES 4
void worker(int id)
{
// blablabla work here
printf("worker %d\n",id);
printf("[%d] I'm child of %d\n",getpid(),getppid());
}
int main (int argc, const char * argv[])
{
int pid;
for (int i=0; i<CORES; i++)
{
pid = fork();
if (pid == 0) // if child
{
worker(i);
exit(0);
}
else if (pid>0)
{
printf("[%d] Big father here!\n",getpid());
}
else
{
printf("--- Fork problem ---");
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题: