Kodama's home / tips.

プロセスとファイルの関連をしらべる

Linux で プロセスとファイルの対応を調べる方法.
  1. プロセス番号と実行のファイルの関連(pstree -p, ps aux, top)
    1. プロセス番号 --> 実行ファイル(/proc/*/exe)
    2. 実行ファイル --> プロセス番号(fuser)
  2. プロセスと それが open/使用 しているファイルの対応
    1. プロセス --> オープンファイル(/proc/*/fd)
    2. ファイル --> プロセス(fuser -v)
    3. ポート --> プロセス(fuser -v)
    4. ファイルシステム --> プロセス(fuser -mv)

プロセス番号と実行ファイル

  1. 実行ファイルからプロセス番号をしらべる
    fuser (実行ファイル)
  2. プロセス番号から実行ファイルをしらべる
    ls -l /proc/(プロセス番号)/exe
  3. プロセス番号と実行中のファイルの関連をしらべる
    pstree -p, ps aux , top または ls -lv /proc/[0-9]*/exe
例:
$ fuser /bin/sh
/bin/sh:      178e   225e   258e   259e   388e   394m  1768e  1797e  4158e 23900e 25678e
$ ls -l /proc/25678/exe
lrwxrwxrwx    1 kdm      users           0 10月  9日  06:23 /proc/25678/exe -> /bin/bash

そのファイル/ポート/ファイルシステムを使用しているプロセスは?

  1. fuser -v (ファイル|ディレクトリ)
    プロセス番号にはファイルへのアクセス形式を表すマークがつく.
    c(カレントディレクトリ), e(実行ファイル), f(オープンファイル), r(ルートディレクトリ),m(mmap されたファイルか共有ライブラリ)
  2. fuser -v telnet/tcp
    TELNET ポートにアクセスしているプロセス. /etc/servicesを参照.
  3. fuser -mv (マウントポイント)
    ファイルシステム上のファイルにアクセスしているすべてのプロセス.
    umount でデバイスを使用中のときに確認に使える.

そのプロセスが使用(オープン)しているファイルは?

使用中のファイル/socket/pipe をしらべる.
ls -lv /proc/(プロセス番号)/fd |sed -n 's/^.* -> //p'
ls -lv /proc/(プロセス番号)/fd |sed -n 's:^.* -> /:/:p'  (ファイルのみを表示する場合)
例:
$ ls -lv /proc/993/fd |sed -n 's/^.* -> //p'
/dev/null
/dev/tty1
/dev/tty1
pipe:[16359433]
pipe:[16359423]
pipe:[16359423]
pipe:[16359424]
pipe:[16359424]
pipe:[16359433]
/usr/local/lib/wazilla/component.reg
socket:[16359435]
/usr/local/lib/wazilla/chrome/lofi.jar
/usr/local/lib/wazilla/chrome/comm.jar
....略
注. socket の詳細は netstat で調べると良い.
Kodama's home / tips.