我想知道为什么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()
(子进程编号)相同的数字。感谢您的澄清!
最佳答案
您正在忽略该错误,因此无法分辨。
我最好的猜测是,您的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
,请在进行分叉之前先阻止信号。关于c - 如果fopen()存在,则waitpid()返回-1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26476274/