0

我想知道为什么在存在时waitpid()返回-1 。fopen()

FILE *fp = fopen ("abc.txt", "r");
fclose(fp);

pid_t pid = fork ();
if (pid == 0) { /* child process */
    printf ("child %d\n", getpid());
}
else {                  /* parent process */
    pid_t pid2 = waitpid (pid);
    printf ("parent %d\n", pid2);
}

pid2pid等于上例中的 -1,但如果我消除它,它会变成与 (子进程号) 相同的数字fopen()。感谢您的澄清!

4

1 回答 1

0

您忽略了错误,因此无法分辨。

我最好的猜测是你的waitpid电话被死孩子的 CHLD 信号打断了。

测试错误代码以确保:

int status;
pid_t pid2;
while ((p = waitpid(pid, &status, 0)) == -1)
{
    printf("waitpid error: %s\n", strerror(errno));
}
printf("reaped child: %d\n", pid2);

如果您不关心SIGCHLD,请在进行分叉之前阻止信号。

于 2014-10-20T23:00:55.953 回答