0
我有一個c程序,用fork和execlp執行另一個進程(bash腳本)。當我想要殺死這個進程時,它會移動到殭屍狀態。爲什麼是這樣??叉,execlp和殺。殭屍進程
創建過程:
switch (PID_BackUp= fork())
{
case -1:
perror("fork");
printf("An error has occurred launching backup.sh script!\n");
break;
case 0:
execlp("/usr/local/bin/backup.sh", "/usr/local/bin/backup.sh", NULL, NULL, NULL);
break;
default:
printf("backup.sh script launched correctly! PID: %d\n", PID_BackUp);
break;
}
殺死一個過程:
if(kill(PID_BackUp,SIGKILL)==-1)
fprintf(stderr, "No se ha podido matar el programa: %d\n", PID_BackUp);
else
printf("\nProceso con identificador %d, se ha abortado\n", PID_BackUp);
所以在這一點上,轉移至僵死狀態。我做錯了什麼?
那麼,使用fork的進程應該等待(waitpid)的子進程?我在我的通用程序(嵌入式平臺)中使用fork,所以我不能等待子進程(我將不得不創建特定的線程) –
是的,在某些時候,您應該「等待」或「waitpid」。但是,閱讀更多關於'SIGCHLD'的信息 –