bash - 如何优雅地停止 bash 脚本中的无限循环?

标签 bash shell infinite-loop

我需要每 X 秒运行一次应用程序,因此,就 cron 不能以这种方式处理秒数而言,我编写了一个带有无限循环的 bash 脚本,其中有 X 秒休眠。

当我必须手动停止正在运行的脚本时,我想以正确的方式来做——让应用程序完成功能,只是下次不要进入循环。

您知道如何实现吗? 我想过传递参数,但我找不到如何将参数传递给正在运行的脚本。

最佳答案

你可以捕获一个信号,比如 SIGUSR1:

echo "My pid is: $$"
finish=0
trap 'finish=1' SIGUSR1

while (( finish != 1 ))
do
    stuff
    sleep 42
done

然后,当您想在下一次迭代中退出循环时:

kill -SIGUSR1 pid

其中 pid 是脚本的进程 ID。如果在 sleep 过程中信号升高,它会醒来( sleep sleep 直到任何信号出现)。

关于bash - 如何优雅地停止 bash 脚本中的无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11203201/

相关文章:

python - 通过 Exec 在 C 中运行 Python 脚本?

bash - Ubuntu bash 脚本 - 搜索所有文件夹以运行视频转换

linux - 如何使用 bash 写入除现有常规文件以外的任何文件?

linux - 在服务器启动期间运行应用程序

java - Java中如何保证用户输入始终为Integer

python - while 循环内无限 while 循环

c++ - boost thread_group 无限循环

bash - Bash 中的运算符 "="和 "=="有什么区别?

linux - 从 pdb 轨迹中提取每个文件

linux - 使用脚本编号和复制具有奇数和偶数的文件