【发布时间】:2019-11-18 16:25:52
【问题描述】:
我创建了以下代码:
int main(int argc, char *argv[])
{
int i, n, N;
pid_t pid;
int status;
N = atoi(argv[1]);
for(i = 0; i < N; i++) {
pid = fork();
if(pid==0) {
srand(getpid() * getppid());
n = rand() % 10 + 1;
printf("I'm child nº %d with childpid %d, parent pid = %d, n = %d\n", i, getpid(), getppid(), n);
exit(n);
}
}
while ((pid = waitpid(pid, &status, 0))) {
if (pid < 0)
;
else if (WEXITSTATUS(status) < 4)
printf("exit status %d lower than 4\n", WEXITSTATUS(status));
}
wait(NULL);
return 0;
}
这个想法是一个父进程分叉 N 个子进程,每个子进程都以随机值退出。我希望我的父进程监视所有子进程并在退出状态为例如 = 4 的状态退出。
【问题讨论】:
-
所以如果最后一个返回的状态低于 4,就派生一个新的孩子。
-
但是如果新的孩子再次返回另一个低于 4 的状态会发生什么?
-
那么它的退出状态可用
waitpid接口。所以你检查它的退出状态,然后再次分叉。 -
我已经在使用waitpid了,这里的问题是子进程可以一直以