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

时间:2011-07-21 16:30:17

标签: bash shell shutdown background-process

如果我关闭Firefox窗口或者以某种方式停止此脚本,我怎么能管理这里作为后台进程调用的morbo-server会自动关闭/终止?

#!/bin/bash

morbo Mojolicious_Lite.pl &

firefox -new-window http://localhost:3000/

3 个答案:

答案 0 :(得分:7)

好的,让我们来解决这个问题。

#!/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中断 - 在这种情况下陷阱会杀死它们。

您可以使用

直观地测试它(即查看执行的内容)
bash -x run.sh

假设您的脚本名为run.sh;)

答案 1 :(得分:1)

$_变量是您上次后台作业的PID。用它来杀死你的进程。要捕获错误/信号,请使用trap(man bash有一个例子)。

答案 2 :(得分:1)

在bash中,$ _是上一个命令的最后一个参数。要杀死后台作业,您必须使用作业号(或PID)。使用工作号码的示例:

[15:29:29 ~]$ gvim &
[2] 28509
[15:29:31 ~]$ kill %2
[15:29:39 ~]$
[2]+  Terminated              gvim
[15:29:42 ~]$

[2]是作业编号,在启动后台进程时会显示。