
複数のスクリプト(時間、バッテリー、ボリュームなど)の出力をパイプするステータスバーがあります。これらのスクリプトとステータスバー自体は単一のbashスクリプトで実行されますstatusbar
。プロセスが終了すると、statusbar
次のようにサブプロセスを終了してそれ自体をクリーンアップします。
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
ターミナルを呼び出しstatusbar
てからSIGTERM信号で終了すると、すべて正常に動作します。
ただし、次のようにファイルを起動すると、statusbar
スクリプトは自分でクリーンアップできなくなります。その理由は、スクリプトと同じプロセスグループにあり、他のすべてのプロセスがそこから起動されるためです。私はこれを通してこれを見つけました。.xinitrc
statusbar &
statusbar
.xinitrc
これ答え。
問題は:statusbar
プロセスとすべての子を自分のプロセスグループに入れて、それをきちんと.xinitrc
整理できますか?それとも、すべての子供を殺す別の方法がありますかstatusbar
?
PS:ステータスバーを完全に取り除きたいのは一般的ではないことを知っています。しかし、簡単に再起動し、最終的にXを終了せずに色のテーマを動的に変更できるようにしたいと思います。
答え1
setsid
(パッケージの一部util-linux
)を使用して、.xinitrc
新しいセッションでスクリプトを起動できます。
setsid statusbar
しかし、まだ信号を受信できますか?