我的.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 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
?