.xinitrcで新しいプロセスグループを起動します。

.xinitrcで新しいプロセスグループを起動します。

複数のスクリプト(時間、バッテリー、ボリュームなど)の出力をパイプするステータスバーがあります。これらのスクリプトとステータスバー自体は単一のbashスクリプトで実行されますstatusbar。プロセスが終了すると、statusbar次のようにサブプロセスを終了してそれ自体をクリーンアップします。

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

ターミナルを呼び出しstatusbarてからSIGTERM信号で終了すると、すべて正常に動作します。

ただし、次のようにファイルを起動すると、statusbarスクリプトは自分でクリーンアップできなくなります。その理由は、スクリプトと同じプロセスグループにあり、他のすべてのプロセスがそこから起動されるためです。私はこれを通してこれを見つけました。.xinitrcstatusbar &statusbar.xinitrcこれ答え。

問題は:statusbarプロセスとすべての子を自分のプロセスグループに入れて、それをきちんと.xinitrc整理できますか?それとも、すべての子供を殺す別の方法がありますかstatusbar

PS:ステータスバーを完全に取り除きたいのは一般的ではないことを知っています。しかし、簡単に再起動し、最終的にXを終了せずに色のテーマを動的に変更できるようにしたいと思います。

ベストアンサー1

setsid(パッケージの一部util-linux)を使用して、.xinitrc新しいセッションでスクリプトを起動できます。

setsid statusbar

しかし、まだ信号を受信できますか?

おすすめ記事