小编Phy*_*aux的帖子

防止 SIGINT 到达子进程

我有一个用于运行服务器的 bash 脚本,该脚本通常由用户使用Ctrl-C. 在退出时,它运行一个清理函数,我不想被第二个中断Ctrl-C

#!/bin/bash

...

function cleanup {
    trap '' INT
    echo -n " Cleaning up..."
    scp $SRV:~/$DIR/server.log . && ssh -t $SRV "rm -rf ~/$DIR"
    echo " Finished."

    exit 0
}
trap cleanup EXIT

...
Run Code Online (Sandbox Code Playgroud)

目前,Ctrl-Cscp完成前一秒会导致脚本无限期挂起。我知道这与SIGINT发送到 bash 脚本和scp进程有关,但我不知道为什么这会导致脚本挂起,而不仅仅是导致清理失败。

所以我的问题是:

  1. 为什么这会导致脚本挂起?
  2. 如何防止到达的SIGINTscpssh子进程?

bash process signals trap

4
推荐指数
1
解决办法
1749
查看次数

标签 统计

bash ×1

process ×1

signals ×1

trap ×1