我制作了一个脚本来调用inotifywait
. 它工作正常,但我有时想停止它。
如何停止最后一个inotifywait
实例?
我无法理解如何使用inotify_rm_watch
我理解的用于关闭它。
7341 ? S 0:00 inotifywait -m /home/andy/Downloads/ --format %w
我制作了一个脚本来调用inotifywait
. 它工作正常,但我有时想停止它。
如何停止最后一个inotifywait
实例?
我无法理解如何使用inotify_rm_watch
我理解的用于关闭它。
7341 ? S 0:00 inotifywait -m /home/andy/Downloads/ --format %w
您指的
inotify_rm_watch
是在编写“真实”程序(用 C 或类似语言)时使用的 API(C 函数),而不是脚本。所以它不适用于你的情况。如果您想停止
inotifywait
,您可以像使用任何其他程序一样执行此操作:无论是问题
ps -ef | grep inotifywait
,选择PID(在您的示例中大概7341
),然后发送一个信号:kill 7341
或者使用方便脚本
killall
杀死所有具有给定名称的程序。killall
通常默认安装。killall inotifywait
使用时有什么问题
kill <pid>
?您可能有多个
inotifywait
进程,因为其他脚本可以inotifywait
独立使用。因此,使用此命令ps -ef | grep inotifywait
查找正确的 PID 并不是最好的做法,因为您需要很好地假设哪个inotifywait
进程属于您的脚本。因此,您最终可能会杀死错误的 PID。此外,该命令killall inotifywait
比上一个命令更具侵略性。但是,如果您真的不关心其他系统正在使用 inotifywait,您可以使用积极的命令。我最好的方式来杀死每个实例的
inotifywait
进程inotifywait
您可以创建一个文件标志来终止特定运行脚本的 inotifywait。下面的脚本是示例如何启动 inotify 脚本、停止它,甚至测试它是否针对特定的 inotify PID 运行。
您可以从日志文件中观看此操作
$REPORT_FILE
要开始监控,您可以使用:
要使用 inotifywait 是否正在运行来测试脚本,请执行以下命令:
因此,要停止 inotify 运行进程,您只需要运行相同的脚本
使用此方法,您无需知道该 inotifywait 进程的进程 ID 是什么。
它是如何工作的?
您注意到我有 2 个文件
$flag $test
要从inotifywait
命令中监视,因此如果我对$flag
文件进行更改,甚至会立即触发修改,我可以利用这个机会停止inotifywait loop
. 此外,您可以看到脚本实际上存储了inotifywait
at的实际 pidpid="inotify-test.pid"
。因此,您可以使用这个正确的 pid 手动终止inotifywait
进程。这会杀死所有实例
inotifywait
:使用时,
inotifywait --daemon
您永远不会获得进程的 ID。如果您像我一样不想不加选择地杀死所有 inotifywait 实例,则可以改用
nohup
andinotifywait --monitor
。这是我在我的 bash 脚本中使用它的方式。它允许我不打扰其他正在运行的实例
inotifywait
:输入和输出重定向命令 (
</dev/null >/dev/null 2>&1 &
) 来自StackOverflow 上的这个答案