如何杀死所有由脚本启动的进程

如何杀死所有由脚本启动的进程

我的.xinit脚本如下所示:

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

它所做的只是调用基本 xinit 并调用我的自定义桌面初始化脚本。

接下来,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 0pkill -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

相关内容