我在使用 fork/waitpid 函数时遇到问题。
我正在尝试编写程序,首先处理和打印子 PIDS,然后是父 PID
我的代码:
int main(void)
{
pid_t pid;
int rv = 0;
int i = 1;
pid_t child_pids[2];
for (i = 0; i < 2; i++)
{
switch (pid = fork())
{
case -1:
perror("fork");
exit(1);
case 0:
pid = getpid();
exit(i);
break;
default:
child_pids[i] = pid;
break;
}
}
if (pid != 0 && pid != -1) {
for (i = 0; i<2; i++){
int status = 0;
printf("PARENT: waiting for child %d (%d)\n", i, child_pids[i]);
rv = waitpid(child_pids[i], &status, 0);
printf("Child: %d, Here!!!\n", i);
}
printf("parent pid = %d\n", getpid());
}
}
目前,它先创建父项,然后再创建子项。那么有人有什么提示可以做什么吗?
最佳答案
来自 waitpid(2)
的 manpage :
The value of pid can be: [...] -1 meaning wait for any child process.
和
waitpid(): on success, returns the process ID of the child whose state has changed; [...]
这意味着您可以像这样在 main 的末尾简单地循环 waitpid:
#define FORKED_CHILDREN 2
if (pid != 0 && pid != -1) {
for (int collected = 0; collected < FORKED_CHILDREN; ++collected) {
pid_t cpid = waitpid(-1, NULL, 0);
printf("Child pid: %d\n", cpid);
}
printf("parent pid = %d\n", getpid());
}
关于c - parent 和多个 child 的 PID。 Fork & waitpid - 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28454645/