我有一个运行“nohupped”的shell脚本后台进程。这个过程将在一个陷阱中接收信号,但是当玩一些代码时,我注意到一些信号被忽略,如果它们之间的间隔太小。trap函数的执行花费了太多时间,因此随后的信号
未服务。不幸的是,trap命令没有某种信号队列,这就是为什么我要问:解决这个问题的最佳方法是什么?
一个简单的例子:
function receive_signal()
{
local TIMESTAMP=`date '+%Y%m%d%H%M%S'`
echo "some text" > $TIMESTAMP
}
trap receive_signal USR1
while :
do
sleep 5
done
最佳答案
在不重新设计方法的情况下,最简单的更改是使用realtime signals,即哪个队列。
这不是便携式的。实时信号本身是一个可选的扩展,在任何情况下,扩展都不需要shell和实用程序对它们的支持。然而,碰巧linux上的相关gnu实用程序-bash(1)
和kill(1)
-确实以常识性的方式支持实时信号。所以,你可以说:
trap sahandler RTMIN+1
在其他地方:
$ kill RTMIN+1 $pid_of_my_process
关于linux - Shell脚本中的定时陷阱,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13371558/