web-dev-qa-db-ja.com

.xinitrcで新しいプロセスグループを開始します

いくつかのスクリプト(時間、バッテリー、音量など)の出力をパイプするステータスバー(レモンバー)があります。これらのスクリプトとステータスバー自体はすべて、単一のbashスクリプトstatusbarで開始されます。 statusbarプロセスが強制終了されると、次のように、子を強制終了しようとすることで、プロセス自体がクリーンアップされます。

_trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
_

ターミナルでstatusbarを呼び出してから、SIGTERMシグナルで終了すると、これはすべて正常に機能します。

ただし、_.xinitrc_ファイルでstatusbarを次のように開始すると:_statusbar &_、statusbarスクリプトはそれ自体の後でクリーンアップできなくなります。これは、_.xinitrc_スクリプトと同じプロセスグループにあり、そこで開始される他のすべてのプロセスと一緒になっているためです。私はこれを次のようにして発見しました this answer。

問題は、statusbarプロセスとそのすべての子を_.xinitrc_の独自のプロセスグループに入れて、それ自体が正常にクリーンアップできるようにすることはできますか?あるいは、statusbarのすべての子を殺す別の方法があるかもしれませんか?

追伸:ステータスバーをきれいに殺したいというのはあまり一般的ではないことを私は理解しています。ただし、Xを終了せずに、簡単に再起動して、最終的にカラーテーマを動的に変更できるようにしたいと思います。

4
Koen

util-linuxsetsid.xinitrcパッケージの一部)を使用して、新しいセッションでスクリプトを開始してみてください。

setsid statusbar

しかし、それでもあなたの信号を受信しますか?

2
meuh