陷阱,但在下面的例子中按Ctrl + C它会在10秒结束之前中断当前命令(sleep),打印消息“SIGINT received”然后立即开始下一次睡眠:
#!/bin/bash
trap 'echo SIGINT received' INT
counter=0
while true
do
let counter=counter+1
echo start sleeping period $counter
sleep 10
done
我使用陷阱有什么问题吗?如何在不使用子进程或子shell的情况下实现让当前命令在按Ctrl + C后完成的行为(这种方式显示为here)?
答案 0 :(得分:0)
Ctrl + C会中断当前前景组,在您的情况下,它既是脚本本身又是休眠。
由于sleep
在SIGINT上死亡,它会立即退出。这会导致立即打印消息。
如果您希望能够在没有死亡的情况下向您的进程发送SIGINT,您可以在启动进程之前忽略该信号,并希望该进程不会重置信号操作(大多数程序不会): / p>
#!/bin/bash
trap 'echo SIGINT received' INT
counter=0
while true
do
let counter=counter+1
echo "start sleeping period $counter"
( trap '' INT; exec sleep 10; )
done