为什么trap有时会忽略信号?

为什么trap有时会忽略信号?

我有以下脚本

#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT


while :
do 
                echo "Hello"
done

当我按Ctrl-时, Cwhile 循环不会停止并且echo bye不会执行。

如果我有以下情况,也会发生同样的事情:

#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT


while echo -n ""
do 
                echo "Hello"
done

为什么trap会忽略SIGINT信号?

答案1

echo bye执行,但你看不到它。尝试添加sleep 0.5到您的 while 循环中,您就会看到它。

while 循环不会停止,因为您trap使用了 Ctrl/C。如果您希望代码退出,您需要添加一个exit命令:trap

#!/bin/bash
#
gotcha()
{
    echo "Bye"
    exit 1
}

trap gotcha SIGINT

while :
do 
    echo "Hello"
    sleep 0.5
done

关于该功能需要了解的一件非常重要的事情trap是,在脚本中的当前命令(无论是什么)完成执行之前,它不会触发。所以你不一定用它来中断长时间运行的命令。

相关内容