3

我需要检测我的一个后台进程何时退出。因此,我安装了一个陷阱。run_gui并且run_ai1是简单的exec函数。

run_gui & gui_pid=$!
run_ai1 & ai1_pid=$!
trap 'echo foo' SIGCHLD
while true; do
    echo "Started the loop"
    while true; do
        read -u $ai1_outfd line || echo "Nothing read"
        if [[ $line ]]; then
            : # Handle this
        fi
    done
    while true; do
        read -u $gui_outfd line || echo "nothing read"
        if [[ $line ]]; then
            : # Handle this
        fi
    done
done

当我关闭 GUI 时,什么也没有发生。仅当我按 ctrl+c 时才会执行该echo foo命令。

为什么我错过了SIGCHLD

4

1 回答 1

5

默认情况下,非交互式 shell 不启用作业控制。看看在脚本开头放置“set -o monitor”是否会产生你想要的结果。

资料来源:GNU Bash 的维护者Chet Ramey

于 2016-05-31T18:36:20.883 回答