如何在C中创建流程链?
我需要创建5个过程,一个是第二个的父亲,第三个的祖父,等等。所有这些过程都必须等待对方完成。我尝试了以下方法:如何在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作
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()
。