bash - 使用信号陷阱中断 bash 中的 sleep

标签 bash shell

我试图通过 sleep 命令在正在休眠的 bash 脚本中捕获 SIGUSR1 信号:

#!/bin/bash

trap 'echo "Caught SIGUSR1"' SIGUSR1

echo "Sleeping.  Pid=$$"
while :
do
    sleep 10
    echo "Sleep over"
done

信号陷阱有效,但在 sleep 10 完成之前不会显示正在回显的消息。
看来 bash 信号处理会等到当前命令完成后再处理信号。

有没有办法让它在收到信号后立即中断正在运行的 sleep 命令,就像 C 程序中断 libc sleep() 一样功能?

最佳答案

#!/bin/bash

trap 'echo "Caught SIGUSR1"' SIGUSR1

echo "Sleeping.  Pid=$$"
while :
do
   sleep 10 &
   wait $!
   echo "Sleep over"
done

关于bash - 使用信号陷阱中断 bash 中的 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27694818/

相关文章:

bash - 64 位 Ubuntu 上的脚本问题

regex - sed错误: bad option in substitution expression

git - 按最近修改日期 (git) 以人类可读格式排序的文件列表

python - 找出每个 clientId 的新旧映射之间的差异

bash - 如何grep文件中不区分大小写的字符串?

shell - 将每隔一行与下一行连接起来

Bash echo 命令不使用转义字符

json - 我怎样才能在shell脚本中curl请求带有 header 的请求

linux - (标准输入) 1 : syntax error

bash - if 中的 like 子句