プロセスでファイルが開いている場合は、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

マンページにリストされていますが、これは有効な呼び出しではありませんlsoflsof考慮事項は次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

関連情報