
Mac OS Xでファイルとやり取りしているアプリやプロセスを確認する
lsofコマンドを使用すると、特定のファイルを特定の瞬間に使用しているプロセスまたはアプリケーションを正確に確認できます。これはopensnoopコマンドに似ていますが、ファイルの変更を時間経過に沿って監視するのではなく、lsofは特定の瞬間のスナップショットを取得できるため、トラブルシューティングに役立ちます。
lsof /path/to/filename
たとえば、/var/log/system.log と何がやり取りされているかを確認するには、そのファイルを指定します。
$ lsof /var/log/system.log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Console 84281 Will 8r REG 14,2 140239 71929128 /private/var/log/system.log
この場合、system.log を使用しているアプリは「Console」です。繰り返しになりますが、これは lsof コマンドが実行された瞬間のスナップショットを示していますが、前述の opensnoop コマンドを使用することで、どのプロセスがそのファイルをリアルタイムで使用しているかを追跡できます。
sudo opensnoop -f /var/log/system.log
上記の結果、次のようになります。
$ sudo opensnoop -f /var/log/system.log
Password:
UID PID COMM FD PATH
501 84358 cat 3 /var/log/system.log
501 45411 console 3 /var/log/system.log
0 15 syslogd 16 /var/log/system.log
この場合、プロセス名については「COMM」の下、プロセス ID については「PID」の下を調べます。
opensnoop では逆の方法も実行でき、ファイルではなくアプリケーションまたはプロセスにコマンドを指定して、アプリが使用しているすべてのファイルを表示できることを覚えておいてください。