[英]wait() for the process child crash
我有以下程序
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;
}
fork調用我的腳本文件。 該腳本文件包含導致管道關閉(有時)的命令。 如果管道被管道封閉,則等待將導致程序崩潰。
當腳本關閉管道時,如何避免程序崩潰?
關於錯誤,請用_exit(-1)
替換return -1
。
您的代碼在錯誤的情況下會泄漏文件描述符。 如果發生錯誤,它也會關閉未初始化的文件描述符。
但是,您顯示的循環只有在wait返回一個不同的pid(如果您有更多的孩子正在運行)或它被中斷(在這種情況下,它返回-1)時才進入。 因此,對我來說,這看起來應該是正確的。 當孩子完成時,將永遠不會進入循環。 如果您認為程序崩潰,則應顯示調用此函數的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.