在无限循环中发出在后台运行的bash脚本的信号

时间:2014-01-18 15:10:35

标签: bash shell unix signals

我有一个bash脚本(在无限循环中睡觉)作为后台进程运行。我想定期发出这个过程的信号,做一些处理而不杀死脚本,即。接收信号的脚本应该运行一个函数,然后再回到睡眠状态。如何在不杀死后台进程的情况下发出信号?

以下是脚本test.sh的代码:

MY_PID=$$
echo $MY_PID > test.pid

while true
do
  sleep 5
done
trap 'run' SIGUSR1 

run()
{
 // data processing
}

这就是我运行它并触发它的方式:

run.sh &

kill -SIGUSR1 `cat test.pid`

1 个答案:

答案 0 :(得分:3)

这适合我。

EDITED 2014-01-20:此编辑可避免频繁醒来。另见这个问题: Bash: a sleep in a while loop gets its own pid

#!/bin/bash

MY_PID=$$
echo $MY_PID > test.pid

trap 'kill ${!}; run' SIGUSR1 

run()
{
    echo "signal!"
}

while true
do
  sleep 1000  & wait ${!}
done

运行:

> ./test.sh &
[1] 14094
> kill -SIGUSR1 `cat test.pid`
> signal!
>