Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在下一个命令完成后,如何停止从bash启动的后台进程?_Bash_Shell_Shutdown_Background Process - Fatal编程技术网

在下一个命令完成后,如何停止从bash启动的后台进程?

在下一个命令完成后,如何停止从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$中是上一个命令的最后一个参数。要杀死后台作业,您必须使用作业编号(或

如果我关闭Firefox窗口或以某种方式停止该脚本,我该如何管理作为后台进程调用的morbo服务器将自动关闭/终止

#!/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