如果进程打开了文件,则让 lsof 采取行动 - 并且理想情况下重复执行此操作

如果进程打开了文件,则让 lsof 采取行动 - 并且理想情况下重复执行此操作

根据示例部分lsof(8) 手册页 在 manpages.ubuntu.com 上,如果进程打开了文件,我应该能够运行命令/采取操作:

要仅在进程打开时才采取操作/u/abe/foo,请使用:

lsof /u/abe/foo  echo "still in use"

当我尝试此语法(在重复模式下)时,它不起作用:

$ lsof -r /u/abe/foo tput bel
lsof: status error on tput: No such file or directory
lsof: status error on bel: No such file or directory
=======

我查看了手册页,但它很长,我想我忽略了一些东西。

我缺少什么?

答案1

尽管联机帮助页列出了它,但这不是有效的lsof调用。lsof将考虑echostill in use作为名称:

lsof /u/abe/foo echo "still in use"

要获得结果lsof并对其采取行动,您可以使用退出代码。在bash

lsof filename && echo "still in use"

或者:

lsof filename || echo "not in use"

如果您希望这种情况重复发生,您可以将上述代码放入循环中或置于lsof重复模式中,然后处理其标准输出,例如bash

lsof -t -r2 filename |
grep --line-buffered -v '=======' |
while read pid
do
    echo Process $pid is using the file
done

相关内容