fork()を使用してCでバックグラウンドプロセスを作成しています。
これらのプロセスの1つを作成したら、そのpidを配列に追加して、バックグラウンドプロセスを追跡できるようにします。
pid = fork();
if(pid == -1)
{
printf("error: fork()\n");
}
else if(pid == 0)
{
execvp(*args, args);
exit(0);
}
else
{
// add process to tracking array
addBGroundProcess(pid, args[0]);
}
ゾンビを刈り取るためのハンドラーがあります
void childHandler(int signum)
{
pid_t pid;
int status;
/* loop as long as there are children to process */
while (1) {
/* get zombie pids */
pid = waitpid(-1, &status, WNOHANG);
if (pid == -1)
{
if (errno == EINTR)
{
continue;
}
break;
}
else if (pid == 0)
{
break;
}
/* Remove this child from tracking array */
if (pid != mainPid)
cleanUpChild(pid);
}
}
バックグラウンドプロセスを作成すると、ハンドラーが実行され、addBGroundProcessを呼び出す前に子をクリーンアップしようとします。
私はemacs&のようなコマンドを使用していますが、すぐに終了するべきではありません。
私は何が欠けていますか?
ありがとう。