どうすれば親プロセスのみを強制終了できますか?


10

私は以下のプロセスを持っています。

ParentProcess
-ChildProcess
-ChildProcess
-ChildProcess

どうすれば親プロセスのみを強制終了できますか?子供のプロセスが殺されないようにしたい。親プロセスを強制終了しようとすると、子がSIGHUPを取得して強制終了されます。


5
子プロセスの定義は、親に関連付けられていますか?
Brad Patton

ええと、おそらくはい。親に関連付けられています。
kcm1700 2013年

回答:


8

一般的に言って、プロセスが孤立する(つまり、その親が死ぬ)とき、それはinitによって採用されます。

あなたが説明する特別な状況は、おそらくその制御ターミナルが閉じるときのインタラクティブプロセスに適用されます(Wikipediaから):

SIGHUPシグナルは、制御端末が閉じているときにプロセスに送信されます。元々は、シリアル回線のドロップをプロセスに通知するように設計されていました。最近のシステムでは、この信号は通常、疑似または仮想端末の制御が閉じられていることを意味します。

これを防ぐには、子プロセスでSIGHUPをブロックする必要があるため、ほとんどの場合、親プロセスからの協力が必要です。

親プロセスがシェルです(もしbashcshなど)と、あなたは、bashの終了は、あなたが任意のコマンドの前に付けることができたときに終了しないと実行コマンドたいnohup(からのinfo coreutils "nohup invocation"):

'nohup'は、ハングアップシグナルを無視して特定のコマンドを実行するため、ログアウトした後もコマンドをバックグラウンドで実行し続けることができます。

この例では:

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;

findシェルが終了して制御端末を閉じても、強制終了されません/dev/ttys000

シェルスクリプトがSIGHUPをブロックする必要がある場合は、ここtrap説明するように、組み込みを使用しますbash


1
nohupなしでプロセスをすでに開いています、何か提案はありますか?
kcm1700 2013年

私の知る限り、あなたは多くのことができない。プロセスが実行されると、シグナルへの反応方法を変更することはできません。
jaume 2013年

1
実行中のプロセスをnohupにするにはどうすればよいですか?stackoverflow.com/questions/625409/...
PeterVermont
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.