孤立プロセスで端末エミュレータが閉じられているかどうかを検出する方法

孤立プロセスで端末エミュレータが閉じられているかどうかを検出する方法

デーモンプロセスを作成した後に孤立するコマンドラインユーティリティがあります。ターミナルエミュレータでデーモンプロセスを終了するにはどうすればよいですか?

ベストアンサー1

プロセスがデーモンになってSIGHUPを無視すると(または独自のセッションリーダーになり、自分のプロセスグループに属する可能性が高くなります)。送るSIGHUP)、端末エミュレータが閉じたときに終了する唯一の方法は、対応するPIDを記録し、致命的な信号を送信することです。

# pid=$(</var/run/some-daemon.pid)
# trap "kill $pid" EXIT

これはbashまたは互換性のあるシェルを使用すると仮定します。デーモンのPIDを取得する方法はさまざまですが、ほとんどのデーモンはPIDをファイルに書き込みます。本当の魔法はtrap命令である。


thrigが指摘したように、このテクニックはデーモンがPIDファイルに書き込み、ユーザーが通常(exit、^ Dなどを使用して)シェルを終了すると仮定します。この技術は脆弱ですが、簡単です。

おすすめ記事