子プロセスでCtrl-Cを使用して親プロセスで操作を実行できますか?

子プロセスでCtrl-Cを使用して親プロセスで操作を実行できますか?

私は背中をmemcache使ってWebフレームワークに基づくWebアプリケーションを開発しています。コンソール出力を表示するか、必要に応じてデバッガに入るようにフォアグラウンドに配置する必要があります。mongodbpythonpython

現在私は一つを持っていますstart.sh

memcache_start
mongodb_start
python fg

そしてstop.sh

memcache_stop
mongodb_stop

スクリプトはすべてを自動化できます。

pythonCtrl通常、fgで-killを使用します。システムを正常にシャットダウンするには、Cそれをpython明示的に実行する必要があります。stop.sh

start.shが論理的に実行する必要がある次の連続操作であるため、stopコマンドを実行できることがわかりCtrlますか?C SIGINT

答え1

Pythonを実行する前にSIGINTを無視し、デフォルトの動作を復元するようにtrap ' ' INTシェルに指示するために使用します。trap - INT

memcache_start
mongodb_start
trap ' ' INT
python fg
trap - INT
memcache_stop
mongodb_stop

このtrap ' ' INT行の後には、シェルにSIGINTを無視するように指示しますが、pythonこれには影響しません。したがって、Ctrl+をクリックすると正常に終了Cしますがpython、シェルはスクリプトの残りのクリーンアップコマンドを実行し続けます。 2番目のコマンドtrap - INTは必ずしも必要ではなく、Ctrl再度+を使​​用してCクリーニングプロセスを停止できます。つまり、SIGINTをに送信すると、memcache_stopシェルは実行を試みずmongodb_stopに単に終了します。

ここ詳細な記事では、シェルが SIGINT/SIGQUIT を処理する方法について説明します。

関連情報