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

标签 bash shell unix signals

我有一个 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/

相关文章:

android - 在 ext4 和 fat32 之间建立链接

java - 如何杀死在服务器上运行的进程

linux - 在unix下安装软件最好的地方是哪里?

bash - 如何忽略通过命令内置调用的命令失败?

linux - 如何在 Bash 中将秒数转换为分秒数?

bash - 通过bitbucket ssh管道执行时找不到docker命令

linux - shell 脚本 : if condition not evaluating properly

sed - 使用 sed 在两个正则表达式之间打印行

macos - 访问 Tomcat 目录时出现问题

bash - cygwin bash 中 CTRL + ARROW 的类似物是什么?