2012-01-10 3 views
1

私は順番にプログラムコマンドを実行しますデーモンモードで画面を起動するスクリプトを持っています。GNU画面は、何が起こる:

screen -L -c <SCREEN_CONFIG-FILE> -dmS <SCREEN-NAME> <program-COMMAND> 

起動後にスクリプトが終了します。

私はPSを行うと、私は画面とプログラムの両方が異なるPGIDとSIDで実行されていることがわかります。プログラムの PPIDはスクリーン〜SのPIDです。それはSIGTERMを取得します:SIGTERMをスクリーンプロセスに送信された場合、プログラムに何が起こるか

は今、私の経験では、画面とプログラムの両方が殺されてしまった、しかしプログラムはSIGTERMシグナルを取得していないのため、それは死にました私が思ういくつかの他の信号。

答えて

2

をあなたはそれが終了する画面デーモンとすべての子にSIGTERMを送信する場合:SIGTERMが直接プログラム処理に送られるか、プログラム自体を終了した場合、スクリーンプロセスも死ぬことになるだろうとどうなるか。また

、プロセスも終了します。 SIGTERMコマンドのプロセスを送信すると、コマンドに依存することがあります。通常、それはいくつかのスクリプトだ場合、あなたはトラップSIGTERMをすることができるかもしれません編集することができ、それが終了されることを防ぐだけでなく終了する必要があります。

はあなたがこのようなものでしたとしましょう:

screen -dmS test-screen bash -c top (screen PID 2001/top PID 3001) 

を、あなたが

kill 2001 

を言う画面デーモンはトップとトップをホスティングしているbashはあまりにも終了します終了し、それになります。

kill 3001 

がトップで終了すると、bashが終了し、画面デーモンが終了します。 SIGTERMは、2001年に送られたときにトップに終了する方法

+0

? SIGTERMは一番上に伝播するか、上に送られる他のシグナルがありますか? 2番目のケースではなぜスクリーンデーモンが終了するのですか? – Medicine

+0

私はSIGTERMが2001に送信されると、SIGTERMをプログラム3001にpropogatedされていないことに気づいたが、それでも3001殺された、この場合にはSIGKILLや他のいくつかの信号によってプログラムのプロセスを強制終了画面できます。 – Medicine

関連する問題