bash zenity 对话框在取消时不会终止进程

bash zenity dialog does not kill process when cancel depressed

我有一个简单的 bash 脚本来控制亚马逊 AWS 的上传和下载。上传和下载工作正常。但有时,我的互联网连接很差,我想取消 AWS activity。但是,当我单击取消按钮(zenity 进度对话框)时,AWS 进程继续并继续(几分钟)...我可以终止 AWS 进程的唯一方法是转到终端并执行 "killall -9 aws"

    while [ "$repeat" -eq 0 ]; do
      ...   setup code ...
      aws s3 sync "$dir1" "$dir2" --region us-east-1 --output text --sse --delete  | tr '\r' '\n' > "$last_log_file"
      ...  error code analysis
    done | zenity --progress --title="$title_text" --text="$msg" --pulsate --auto-close
    killall -9 aws # <=== When I depress zenity 'cancel' ... this code never executes !!! (this code was added for debug)

我知道当我按下取消按钮时它应该终止进程。有什么办法可以强制发生这种情况吗?

感谢Eric的回复,我现在有了解决办法。关键是在 zenity 命令的末尾添加“&”,以便 运行 并行处理..

    done | zenity --progress --title="$title_text" --text="$msg" --pulsate --auto-close &

然后添加一些代码来检测 zenity pid 是否已经消失(因为它已被取消)。一旦检测到zenity pid不见了,使用killall命令kill aws

一些示例代码:

    zenity_pid="$(pidof zenity)"
    while [ "$zenity_pid" != '' ]; do
       echo "$(pidof zenity)" | grep -w "$zenity_pid"
       if [ "$?" -eq 0 ]; then
           sleep 2
       else
           killall -9 aws
           zenity_pid=''
       fi
    done
    wait

A​​WS returns 退出代码 137,这意味着容器收到了 SIGKILL 信号