我有以下程序等待()的過程中孩子崩潰
int external_apply(char *type)
{
int pfds[2];
if (pipe(pfds) < 0)
return -1;
if ((pid = fork()) == -1)
goto error;
if (pid == 0) {
/* child */
const char *argv[8];
int i = 0;
argv[i++] = "/bin/sh";
argv[i++] = "script_file.sh";
argv[i++] = "apply";
close(pfds[0]);
dup2(pfds[1], 1);
close(pfds[1]);
execvp(argv[0], (char **) argv);
exit(ESRCH);
} else if (pid < 0)
goto error;
/* parent */
close(pfds[1]);
int status;
while (wait(&status) != pid) {
printf("waiting for child to exit");
}
return 0;
error:
close(pfds[0]);
return -1;
}
叉把我的腳本文件。腳本文件包含導致管道關閉的命令(有時)。如果管道被scipt關閉,等待將導致程序崩潰。
如何避免程序崩潰時,管是由腳本關閉?
你所說的「崩潰」呢? Wait不關心管道,它只是等待孩子狀態改變。 – Devolus
崩潰。我的意思是程序關閉時不顯示任何消息。事件dmesg不包含任何分段錯誤 – MOHAMED
代碼的其餘部分在做什麼?看到我的答案更新。對我來說它看起來不錯,所以也許你的問題在別的地方。 – Devolus