添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

TA贡献1797条经验 获得超6个赞

可以清理一些乱七八糟的东西trap。它可以提供在特定信号到达时执行的工作清单:


trap "echo hello" SIGINT

但如果shell退出,也可以用来执行某些操作:


trap "killall background" EXIT

它是内置的,因此help trap将为您提供信息(适用于bash)。如果您只想杀死后台工作,则可以


trap 'kill $(jobs -p)' EXIT

注意使用single ',以防止外壳$()立即替换。


查看完整回答

TA贡献1831条经验 获得超9个赞

这对我有用(感谢评论者的改进):


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

kill -- -$$将SIGTERM发送给整个进程组,从而也杀死后代。


EXIT使用时指定信号很有用set -e(此处有更多详细信息)。


查看完整回答

TA贡献1816条经验 获得超4个赞

陷阱'kill $ {jobs -p)'退出


我只对Johannes的答案做些微改动,并使用jobs -pr限制kill到正在运行的进程,并向列表中添加一些其他信号:


trap 'kill $(jobs -pr)' SIGINT SIGTERM EXIT


查看完整回答