如果fopen()存在,waitpid()返回-1

时间:2014-10-20 22:56:45

标签: c process fopen waitpid

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

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);
}
如上所示,

pid2等于-1,但如果我消除pid,则它变为与fopen()(子进程号)相同的数字。 谢谢你澄清!

1 个答案:

答案 0 :(得分: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,请在进行分叉前阻止信号。