【问题标题】:bash trap will echo from keyboard Ctrl-C while not kill 2bash 陷阱将从键盘 Ctrl-C 回显,而不是杀死 2
【发布时间】:2019-10-25 13:17:53
【问题描述】:

假设我有一个脚本:

#!/bin/bash
# test_trap.sh

trap "echo SIGINT captured!" SIGINT
echo $$

sleep 1000

我知道陷阱命令只会在sleep 1000 接收到 SIGINT 信号时完成后执行。但是当我按下键盘Ctrl-C时会执行trap的命令:

> sh test_sh.sh
50138
^CSIGINT captured!

而且使用 kill -s SIGINT 不会。

我在这里错过了什么?

bash 版本是 GNU bash,4.2.46(2)-release

【问题讨论】:

    标签: bash signals bash-trap


    【解决方案1】:

    使用kill -s SIGINT 50138,您只是将信号发送到外壳进程,并且必须等待sleep 1000 完成,因为sleep 没有收到信号。

    但是,Control-C 会导致终端向当前进程组中的每个进程发送 SIGINT,因此您的 shell 脚本 sleep 都会收到它。在sleep 完成之前,您的脚本仍然不会处理陷阱命令,但sleep 会立即退出以响应它刚刚从终端收到的SIGINT

    如果你的kill支持,你也可以使用kill -s SIGINT -50138(注意负进程id)向整个进程组发送SIGINT。

    【讨论】:

    • 谢谢你的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2015-10-07
    • 2021-12-15
    • 2012-05-31
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多