[英]waitpid() returns -1 if fopen() exists
我想知道為什么fopen()
存在時waitpid()
返回-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,但如果我消除了fopen()
,它將與pid
(子進程號)相同。 感謝您的澄清!
您正在忽略該錯誤,因此無法分辨。
我最好的猜測是,您的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
,請在進行分叉之前先阻塞信號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.