ロックされて編集できないときにそのファイルをオープンしているプロセスを探したい

MacやLinuxで、ファイルを編集しようとしたり削除しようとしたときにロックされていて処理できないとき、 そのファイルをオープンしているプロセスを特定する方法。

ファイルをオープンしているプロセスを探す:lsof

lsofコマンドを使う。

$ lsof <ファイル名>

例えば、/var/log/nginx/access.logをオープンしているプロセスを探すには以下のようにする。

$ lsof content/linux/find-processes/index.md 
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
hugo    29154  xxx  929r   REG   1,14      750 49183329 content/linux/find-processes/index.md

PID列にプロセスIDが表示されるのでpsコマンドで確認したり、killコマンドでストップしたりできる。

$ ps auxww | grep 29154
xxx              29154   0.0  0.3 409607120 116240 s002  S+    3:49PM   2:26.05 hugo server

プロセスがオープンしているファイルを探す:lsof -p

逆に、プロセスがオープンしているファイルを探すには-pオプションを使う。

$ lsof -p 29154
COMMAND   PID USER   FD     TYPE             DEVICE SIZE/OFF     NODE NAME
hugo    29154  xxx  cwd      DIR               1,14      704 12745271 /content/linux/find-processes/index.md
...