我想知道为什么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()
(子进程号)相同的数字。
谢谢你澄清!
答案 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
,请在进行分叉前阻止信号。