在下一个命令完成后,如何停止从bash启动的后台进程?
如果我关闭Firefox窗口或以某种方式停止该脚本,我该如何管理作为后台进程调用的morbo服务器将自动关闭/终止在下一个命令完成后,如何停止从bash启动的后台进程?,bash,shell,shutdown,background-process,Bash,Shell,Shutdown,Background Process,如果我关闭Firefox窗口或以某种方式停止该脚本,我该如何管理作为后台进程调用的morbo服务器将自动关闭/终止 #!/bin/bash morbo Mojolicious_Lite.pl & firefox -new-window http://localhost:3000/ $\uu变量是上一个后台作业的PID。使用它来终止您的进程。要捕获错误/信号,请使用trap(man bash有一个示例)。在bash$中是上一个命令的最后一个参数。要杀死后台作业,您必须使用作业编号(或
#!/bin/bash
morbo Mojolicious_Lite.pl &
firefox -new-window http://localhost:3000/
$\uu
变量是上一个后台作业的PID。使用它来终止您的进程。要捕获错误/信号,请使用trap
(man bash有一个示例)。在bash$中是上一个命令的最后一个参数。要杀死后台作业,您必须使用作业编号(或PID)。使用作业编号的示例:
[15:29:29 ~]$ gvim &
[2] 28509
[15:29:31 ~]$ kill %2
[15:29:39 ~]$
[2]+ Terminated gvim
[15:29:42 ~]$
[2] 是作业编号,在启动后台进程时显示。好的,我们来解决这个问题
#!/bin/bash
morbo Mojolicious_Lite.pl & P=$!
trap "kill $P" INT # maybe you want EXIT here too?
firefox -new-window http://localhost:3000/
wait
这个应该有用。。。当firefox退出时,shell将等待剩余的作业(morbo),然后可以通过Ctrl-C中断这些作业,在这种情况下,陷阱会杀死它们
您可以用可视化的方式测试它(即查看执行的内容)
假设脚本名为run.sh;) 我怎么能赶上firefox窗口的关闭?@Fritschy:是的!你说得对。到原点。海报:如果屏幕上已经有一个firefox窗口,它会变得复杂,你不能在所有情况下都这么做。如果您的用户打开一个新选项卡,然后关闭原始选项卡,该怎么办?即使你能发现窗口何时关闭,如果你能赶上标签关闭(你不能,但无论如何),那就太晚了。如果用户关闭选项卡,然后执行“撤消关闭最后一个选项卡”操作,该怎么办?“重复标签”怎么样?简言之,重新思考你的方法。我怎么能赶上firefox窗口的关闭?
bash -x run.sh