我有一个 bash 脚本(在无限循环中休眠)作为后台进程运行。我想定期向该进程发出信号,在不终止脚本的情况下进行一些处理,即。接收到信号的脚本应该运行一个函数,然后返回 sleep 状态。如何在不终止后台进程的情况下向其发出信号?
以下是脚本 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`
最佳答案
这对我有用。
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!
>
关于bash - 向在后台无限循环运行的 bash 脚本发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205886/