我正在尝试用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
循环来监视进程并在它死亡时重新启动它,但是我不太确定如何从那里到达我想去的地方。任何建议都非常欢迎。
答案 0 :(得分:2)
不要使用while循环。只需阻止并等待SIGCHLD告诉您其中一个进程已终止。在陷阱中,终止剩余的正在运行的进程。例如:
#!/bin/bash set -m trap 'list=$( jobs -rp ); test -n "$list" && kill $list' CHLD cmd1 & cmd2 & cmd3 & wait
这将运行3个命令。当一个退出时,另外两个将被发送SIGTERM。
答案 1 :(得分:1)
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