[英]Handling SIGCHLD will return EOF to the father, why?
我有一個小的外殼,可以創建子級(使用fork()),並使其通過execvp執行一些命令。 它還支持&選項,以便父親可以同時運行其他命令。 當一個孩子死了時,我想在控制台以及孩子pid上寫那個,所以我為SIGCHLD定義了一個信號處理程序:
void backdeadchild(int sig)
{
int pid, exitstat;
pid = wait(&exitstat);
printf("Child with pid: %d died", pid);
}
問題在於,在處理程序打印消息后,父親也會關閉。 我已經設法理解SIGCHLD在stdin中返回EOF(並且每當父親收到EOF時,它就會關閉),但是為什么SIGCHLD返回EOF? 如果正常..如何避免父親關閉?
如果child的stdout
(或任何其他流)連接到父級的stdin
,則父級自然會收到EOF
。
或者,如果父級不處理,則父級可能會死於SIGPIPE
(管道中斷)信號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.