2009-09-29 8 views
21

私の同僚の一人が、今朝、彼がsupervisordを "kill -9"で殺したとき、スーパーバイザーのサブプロセスが殺されていないと言った。親プロセスが "kill -9"で殺されると、サブプロセスも殺されますか?

彼はそれについてかなり確信していますが、私は何度も試してみましたが、それは起こりませんでした。

親プロセスがkill -9でkillされると、linuxはサブプロセスも強制終了されていることを確認しますか?

答えて

16

父親が殺されたときに殺されるようにするためには、サブプロセスをデーモンにする必要があります。それ以外の場合はinit(1)によって採用されます。

+1

ゾンビプロセスの作成方法に興味があり、システムでどのように処理されるかを試してみるとゾンビプロセスが作成されます: http://www.unix.com/unix-dummies-questions-answers/100737-how- do-you-create-zombie-process.html – Klathzazt

+4

デーモン、父親、親、子、ゾンビの各プロセスがあります。 コンピュータはそのような楽しい気まぐれな話を伝えます。 – jwarner112

23

いいえ、親プロセスが強制終了されたときに子プロセスが必ずしも強制終了されるわけではありません。

しかし、子にパイプが開いていて、親がそれを読み込んでいる場合、次にパイプに書き込もうとするとSIGPIPEが返されます。デフォルトのアクションはそれを殺すことです。それはしばしば実際に何が起こるかです。

8

UNIXでは、親プロセスと子プロセスの存続時間の間に強制的な関係はありません。厳密に言うと、プロセスはexit()を呼び出すか、デフォルトのアクションが終了する未処理のシグナルを受け取ったときに終了します。

ユーザはCTRL-C、CTRL-を\当たったときしかし、「制御端子」の全体の「フォアグラウンドプロセスグループは」その端末上など、SIGINTとSIGQUITのような信号を受信することができます。特定の動作は、ログインシェルによって部分的に実装されます(ttyドライバの助けを借りて)。詳細は非常に複雑な場合があります:herehere

-9

あなたが殺したいプロセスやサービスを知るだけでいいです。私の場合は、httpdがあります。

killall -9 httpd 

これは、httpdのすべての子プロセスを強制終了します。

+0

完全に質問のポイントを逃した。 –

+0

この投稿は、提起された質問には答えません。他の回答があるので、この投稿を削除することをお勧めします。 –

-1

プロセスの親プロセスIDである端末pidを閉じると、端末は閉じます。ターミナルが閉じられると、そのプロセスもすべて終了します。しかし、もしあなたがシェル内にサブシェルを作成すると、プロセスが作成され、そのプロセスのppidが終了すると、そのサブシェルだけがkillされ、その子は孤児になります。その親はinitになり、pidは1になります。

[trainee @ SIPL〜] $ ps -ef |グレープ睡眠訓練生3893 3870 0 10:55 pts/1 00:00:00睡眠4000訓練生3895 3788 0 10:55 pts/0 00:00:00 grep --color = auto sleep [training @ SIPL〜] $ kill - 9 3870 [training @ SIPL〜] $ ps -ef | grep sleep training 3893 1 0 10:55 pts/1 00:00:00 sleep 4000トレーニング者3906 3788 0 10:55 pts/0 00:00:00 grep - color = auto sleep

関連する問題