在bash终端关闭后,我发现了许多方法可以使进程在后台运行。但是,我该怎么做相反呢?关闭终端后如何杀死后台进程?
当前,当我关闭终端时,我收到“进程正在会话中运行...仍然关闭吗?”如果我单击“确定”,则终端关闭,但进程不会被杀死并徘徊。我可以将对这些进程的抑制与终端进程的“死亡”挂钩吗?
简单的例子:运行ssh-agent bash
,然后尝试关闭终端。
答案 0 :(得分:0)
将其放入您的 text.connect("row-activated", self.row_activated)
:
.bashrc
此命令将使shell在退出时杀死其所有子进程。
trap 'kill $(ps -o pid= --ppid $$) 2>/dev/null' exit
命令可捕获信号和其他事件,并让您执行在捕获信号或事件发生时运行的命令。
trap
ARG是外壳程序收到信号SIGNAL_SPEC时要读取并执行的命令。如果SIGNAL_SPEC为EXIT,则从外壳退出时将执行ARG。
trap [-lp] [[arg] signal_spec ...]
命令将信号发送到作为参数提供的PID的作业。
kill
如果既没有SIGSPEC也没有SIGNUM,则假定使用SIGTERM(终止信号)。
kill [-s sigspec | -n signum | -sigspec] pid ...
命令显示有关进程的信息。
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.
扩展为外壳程序的进程ID。在$$
子外壳中,它扩展为当前外壳的进程ID,而不是子外壳。
和$(...)
用于丢弃kill命令的潜在错误输出,该错误输出可能是由执行kill命令时不再存在但执行ps命令时存在的进程引起的-通常是子外壳2>/dev/null
。