いくつかのスクリプト(時間、バッテリー、音量など)の出力をパイプするステータスバー(レモンバー)があります。これらのスクリプトとステータスバー自体はすべて、単一のbashスクリプトstatusbar
で開始されます。 statusbar
プロセスが強制終了されると、次のように、子を強制終了しようとすることで、プロセス自体がクリーンアップされます。
_trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
_
ターミナルでstatusbar
を呼び出してから、SIGTERMシグナルで終了すると、これはすべて正常に機能します。
ただし、_.xinitrc
_ファイルでstatusbar
を次のように開始すると:_statusbar &
_、statusbar
スクリプトはそれ自体の後でクリーンアップできなくなります。これは、_.xinitrc
_スクリプトと同じプロセスグループにあり、そこで開始される他のすべてのプロセスと一緒になっているためです。私はこれを次のようにして発見しました this answer。
問題は、statusbar
プロセスとそのすべての子を_.xinitrc
_の独自のプロセスグループに入れて、それ自体が正常にクリーンアップできるようにすることはできますか?あるいは、statusbar
のすべての子を殺す別の方法があるかもしれませんか?
追伸:ステータスバーをきれいに殺したいというのはあまり一般的ではないことを私は理解しています。ただし、Xを終了せずに、簡単に再起動して、最終的にカラーテーマを動的に変更できるようにしたいと思います。
util-linux
でsetsid
(.xinitrc
パッケージの一部)を使用して、新しいセッションでスクリプトを開始してみてください。
setsid statusbar
しかし、それでもあなたの信号を受信しますか?