我有一个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`
答案 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!
>