把这个放在你的.bashrc:
trap 'kill $(ps -o pid= --ppid $$) 2>/dev/null' exit
这个命令会在你退出时让 shell 杀死它所有的子进程。
说明:
trap 命令捕获信号和其他事件,并让您执行命令,这些命令在捕获信号或事件发生时运行。
trap [-lp] [[arg] signal_spec ...]
ARG 是当 shell 接收到信号 SIGNAL_SPEC 时要读取和执行的命令。如果 SIGNAL_SPEC 为 EXIT,则在退出 shell 时执行 ARG。
kill 命令向作为参数提供的 PID 的作业发送信号。
kill [-s sigspec | -n signum | -sigspec] pid ...
如果 SIGSPEC 和 SIGNUM 都不存在,则假定为 SIGTERM(终止信号)。
ps 命令显示有关进程的信息。
-o format
User defined format of output.
--ppid pidlist
Select which processes to show by PID of their parent process. Selects processes
that are children of those listed in PIDLIST.
最后,shell 中的$$ 扩展为shell 的进程ID。在$(...) 子shell 中,它扩展为当前shell 的进程ID,而不是子shell。
2>/dev/null 用于丢弃 kill 命令的潜在错误输出,这可能是由执行 kill 命令时不再存在但在执行 ps 命令时存在的进程引起的 - 通常是子 shell @ 987654332@.