相关疑难解决方法(0)

如何让父母等待所有子进程完成?

我希望有人可以解释如何让父母等待所有子进程完成后再继续fork之后.我有清理代码,我想运行,但子进程需要返回才能发生这种情况.

for (int id=0; id<n; id++) {
  if (fork()==0) {
    // Child
    exit(0);      
  } else {
    // Parent
    ...
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

c operating-system posix fork process

41
推荐指数
4
解决办法
13万
查看次数

分叉等待 - 如何等待所有的孙子孙女完成

我正在编写一个用于构建一个简单shell的任务,我正在尝试添加一些不需要的功能,但我遇到了管道问题.

一旦我的命令被解析,我就分叉一个进程来执行它们.如果只剩下一个命令,则此进程是执行命令的子例程,否则将执行fork.父级将执行第一个命令,子级将处理其余命令.管道已设置并正常工作.

然后我的主进程调用wait(),然后输出提示.当我执行类似的命令时ls -la | cat,在cat的输出之前打印提示.

我尝试wait()为每个应该执行的命令调用一次,但第一次调用有效,所有后续调用都返回ECHILD.

我如何强迫我的主线等待所有孩子,包括孩子的孩子,退出?

c

4
推荐指数
2
解决办法
4519
查看次数

在C中使用fork()

我正在编写一个程序,它使用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)

我的问题:

  1. 我该怎么办才能使程序只在所有子进程处理完所需信息后终止?(我认为他们正在成为孤儿)
  2. 如何计算自第一个进程开始工作直到最后一个进程终止所花费的时间

c time posix fork core

1
推荐指数
1
解决办法
2107
查看次数

标签 统计

c ×3

fork ×2

posix ×2

core ×1

operating-system ×1

process ×1

time ×1