gpt4 book ai didi

bash - 如何监视两个进程并在一个进程退出时执行某些操作(bash 脚本)?

转载 作者:行者123 更新时间:2023-11-29 09:28:54 25 4
gpt4 key购买 nike

我正在尝试在 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 循环来监视进程并在它死掉时重新启动它,但我不太确定如何从那里到达我想去的地方。非常欢迎任何建议。

最佳答案

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

#!/bin/bashset -mtrap 'list=$( jobs -rp ); test -n "$list" && kill $list' CHLDcmd1 &cmd2 &cmd3 &wait

这将运行 3 个命令。当一个退出时,将向另外两个发送 SIGTERM。

关于bash - 如何监视两个进程并在一个进程退出时执行某些操作(bash 脚本)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8860335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com