终止无限期运行的子命令 - inotify

Posted

技术标签:

【中文标题】终止无限期运行的子命令 - inotify【英文标题】:Terminate indefinitely running sub-command - inotify 【发布时间】:2020-05-10 03:36:29 【问题描述】:

想象一个这样的场景,inotify 调用另一个脚本,该脚本永远运行

while inotifywait -e close_write ./<sample-file>; do 
    ./file.sh
done

内容file.sh

while true; do
    sleep 5;
    echo "sample message";
done

有什么方法可以在sample-file 更新时终止file.sh 的执行?

谢谢!

【问题讨论】:

当您使用echo "$0: message: $*" 修改file.sh 并调用./file.sh $(date) 或其他更改参数时,您可以更轻松地进行测试。 【参考方案1】:

您可以在后台运行file.sh,并跟踪它是否已经运行。如果是,请在再次运行之前将其杀死。示例:

#!/bin/sh
bgpid=
trap 'kill $bgpid' 0 2 3 15 # Kill the background process when the parent exits
while inotifywait -e open ./input.txt; do
    if [ -n "$bgpid" ]; then
        echo "Killing existing file.sh on pid $bgpid"
        kill $bgpid
        bgpid=
    fi
    ./file.sh &
    bgpid=$!
done

【讨论】:

以上是关于终止无限期运行的子命令 - inotify的主要内容,如果未能解决你的问题,请参考以下文章

通过单击按钮终止正在运行的子进程

如何自动终止脚本内命令的无限执行?

杀死运行系统 shell 命令的子进程

在脚本中并行运行 2 个无限循环,并在脚本停止时终止

如何正确的终止正在运行的子线程

无法在 Windows 上使用 Python 终止正在运行的子进程