如何在C中创建流程链?

如何在C中创建流程链?,c,C,我需要创建5个过程,一个是第二个的父亲,第三个的祖父,等等。所有这些过程都必须等待对方完成。我尝试了以下方法: switch (pid = fork()) { case 0: printf("Child PID = %d\n", getpid()); printf("parent: =\%d\n", getppid()); return 0; default: break; 但我的父母总是一样的 调用一个进程myProcess,该进程不返回类型,并将int作

我需要创建5个过程,一个是第二个的父亲,第三个的祖父,等等。所有这些过程都必须等待对方完成。我尝试了以下方法:

switch (pid = fork()) {
  case 0: 
    printf("Child PID = %d\n", getpid());
    printf("parent: =\%d\n", getppid());
    return 0;

default:
  break;

但我的父母总是一样的

调用一个进程
myProcess
,该进程不返回类型,并将
int
作为参数。然后

void myProcess(int x) 
{ 
if (x > 5) return;
if (x != 0)
    myProcess(x - 1);
return;
};

int main()
{
int myvar = 5;
myProcess(myvar);
return 0;
}

它是递归完成的。

您需要使用递归

例如:

void create_processes(int n) {
  if(n == 0) return;
  if(fork() == 0) {
    int status;

    // You're in the child process. Calling it recursively will have the
    // child's PID as parent
    create_processes(n - 1);

    // Do work you need done before the child terminates
    wait(&status);
    // Do work you need done after the child terminates
  } 
}
那就这样说吧

create_processes(5);

所有的人都要互相等待吗?这怎么行?@KerrekSB我想他的意思是父母等待孩子完成。这正是我想要的meant@JossieCalderon:是的,但由于它们是直接相关的,这正是KerrekSB所写的。谢谢,这样效果更好,但从getppid()中,我有时从子PID中得到1,有时从子PID中得到PID-1。有办法解决这个问题吗?我应该把wait()函数放在哪里?@cAMPy我已经更新了我的答案,包括
wait()