簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM