1. ホーム
  2. c

[解決済み] 親プロセスの子プロセスをすべて終了させ、親プロセスは存続させる。

2022-02-28 20:42:02

質問

親を殺さず、その親のプロセスをすべて殺すには、どのような方法があるでしょうか?例えば、私がフォークした不定数の子プロセスを持っていて、与えられたアラームで、私のシグナルハンドラで、私の子プロセスをすべて殺すが、様々な理由で私自身は実行したままにしたいと思います。

今のところ、私はkill(-1*parentPid, SIGKILL)を使用していますが、これは私の親をその子供と一緒に殺します。

どうすればいいですか?

これを達成する1つの方法は、キャッチできる何らかのシグナルを配信することです(not SIGKILL ). そして、現在のプロセスが親プロセスかどうかを検出するシグナルハンドラを設置し、そのハンドラから _exit() 親プロセスでない場合

を使用することができます。 SIGUSR1 または SIGUSR2 または、おそらく SIGQUIT .

このテクニックを図解してみました こちら .

オプションとして (Lidong が提案したように)、親プロセスで SIG_IGN を発行する前に、シグナルに対して kill() コマンドを使用します。

signal(SIGQUIT, SIG_IGN);
kill(0, SIGQUIT);