似乎这只huponexit
适用于登录 shell。如何让非登录 shell(例如,在我的终端窗口中启动的 shell)也拥有这种行为?
发送HUP
到已启动进程的 bash 的操作按预期进行,但实际上huponexit
却没有。
答案1
您可以声明自己的代码在 shell 退出时运行。
trap 'kill -HUP $(jobs -lp) 2>/dev/null || true' EXIT
(我之前提出的建议trap 'kill -HUP $$' EXIT
在 bash 4.2 中不再起作用,因为如果我理解正确的话,当 bash 已经在处理退出条件时,它会跳过部分正常清理工作,包括 HUP 重新发送。)
答案2
trap 'kill -HUP -$$' exit
我似乎无法在上面添加注释。在前面加上一个负号来表示进程组。我认为这会挂断全部由 shell 生成的子进程,包括孙进程、曾孙进程等等。