【问题标题】:How do I monitor two processes & do something if one exits (bash scripting)?如何监视两个进程并在一个进程退出时执行某些操作(bash 脚本)?
【发布时间】:2012-01-14 22:08:18
【问题描述】:

我正在尝试在 bash 中编写一个包装脚本来自动启动和关闭我需要同时运行的三个程序:

#!/bin/bash
gnome-screensaver-command -i -n aeolus-wrapper.sh &
aeolus &
qjackctl

启动它们后,我需要监控 aeolus 和 qjackctl 并在 aeolus 或 qjackctl 退出时终止剩余的两个进程:

# if aeolus exits, kill gnome-screensaver-command and qjackctl
# if qjackctl exits, kill gnome-screensaver-command and aeolus

这就是我卡住的地方。我对this example 很感兴趣,它展示了如何使用until 循环来监视进程并在它死亡时重新启动它,但我不太确定如何从那里到达我想去的地方。非常欢迎任何建议。

【问题讨论】:

    标签: bash shell scripting


    【解决方案1】:

    不要使用 while 循环。只需阻止并等待 SIGCHLD 告诉您其中一个进程已终止。在陷阱中,杀死剩余的正在运行的进程。例如:

    #!/bin/bash 设置-m 陷阱'列表=$(工作-rp);测试 -n "$list" && kill $list' CHLD cmd1 & cmd2 & cmd3 & 等待

    这将运行 3 个命令。当一个退出时,其他两个将被发送 SIGTERM。

    【讨论】:

    • 谢谢。这看起来像我想要的,除了一件事:如果我关闭 qjackctl,它确实会杀死 aeolus 和 gnome-screensaver-command。但是如果我关闭aeolus,它并没有成功杀死qjackctl。相反,在命令行上我看到“jack main catch signal 12”,并且包装脚本继续等待。 (请注意,qjackctl 是 jackd 的 GUI 前端;当您启动 aeolus 时,它会自动启动 jackd。)
    • 听起来 aeolus 正在捕获 SIGTERM 并将 SIGSYS 发送到 jackd。您需要弄清楚可以向 aeolus 发送什么信号才能成功终止它。
    • 原来是:(1)qjackctl其实就是qjackctl.bin,需要这样列出; (2) jackd 需要明确包含在列表中。所以这是有效的:#!/bin/bash set -m trap 'list=$( jobs -rp ); test -n "$list" && kill $list' CHLD gnome-screensaver-command -i -n aeolus-wrapper.sh & jackd -T -ndefault -dalsa -dhw:0 -r44100 -p1024 -n2 & aeolus & qjackctl.bin & wait 当然,有适当的换行符,这里没有显示。再次感谢您的帮助。
    【解决方案2】:
    if [ "a$(pgrep aeolus)" != "a" ] ; 
    then 
        pkill gnome-screensaver-command 
        pkill qjackctl
    fi
    

    qjackctl 也一样

    另一种语法,

    if pgrep aeolus
    then 
        pkill gnome-screensaver-command 
        pkill qjackctl
    fi
    

    【讨论】:

    • 还有if ! pgrep aeolus;然后...`
    • @SiegeX 首先我使用了if ! 语法。由于某种原因,它在我的电脑上不起作用。所以我编辑了。 kill 现在也替换为 pkill。事实上,我保留了这些杀戮线供 OP 编辑​​。
    猜你喜欢
    • 2016-09-26
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多