根据示例部分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
将考虑echo
和still 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