スクリプトで開始されたすべてのプロセスを終了する方法

スクリプトで開始されたすべてのプロセスを終了する方法

私の.xinitスクリプトは次のとおりです

...
exec start_awesome.sh | logger -t awesome-session

それがするのは、基本的なxinitを呼び出し、私のカスタムデスクトップinitスクリプトを呼び出すことだけです。

以下はstart_awesome.sh次のとおりです。

...
# Run stuff in the background
xsettingsd &
urxvt256cd -f
xscreensaver &
picom -b --experimental-backends
yandex-disk start
flatpak run org.keepassxc.KeePassXC &

awesome
pkill -P $$

最後のものの目的pkillは、「このスクリプトによって開始されたすべてを正常に終了する」ことです。それ以外の場合は、以前に分岐したすべてのプロセスが終了するまで、Xセッションが終了しないためです。

問題はうまくいかないということです。私のセッションと分岐したすべてのプロセスを終了する唯一の方法は、またはをkill 0呼び出すことですpkill -u 1000。しかし、これにより、Xorgは予期しない信号について不平を言います。私が望むのは、start_awesome.shクールな終了後に実行されるすべてを殺すことです。

以下のようにテストスクリプトを作成しました。

function child1 {
    echo "Child 1"
    sleep 3s
    echo "Child 1 end"
    exit 11
}

function parent {
    echo "Parent"
    sleep 1s
    echo "Parent end"
}

child1 &

parent
pkill -P ${$}

これは期待どおりに機能します。 child1とparentを起動し、parentが終了すると終了します。私のスクリプトとどう違うのですかstart_awesome.sh

関連情報