私はforkとexeclpを使って別のプロセス(bashスクリプト)を実行するcプログラムを持っています。私はこのプロセスを殺したいとき、ゾンビ状態に移ります。どうしてこれなの??フォーク、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);
だから、この時点でプロセスがゾンビ状態に移行します。私が間違っていることは何ですか?
したがって、フォークを使用するプロセスは、子プロセスのために待機(waitpid)する必要がありますか?私は一般的なプログラム(組み込みプラットフォーム)でforkを使用しているので、子プロセスを待つことができません(特定のスレッドを作成しなければなりません)。 –
はい、ある時点でwaitまたはwaitpidを実行する必要があります。しかし、 'SIGCHLD'についてもっと読む –