我有一个状态栏(lemonbar),我通过管道将几个脚本的输出(时间、电池、音量等)传输到其中。这些脚本以及状态栏本身都是在单个 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
但它还会收到你的信号吗?