Red Hat Training

A Red Hat training course is available for Red Hat Linux

E.3. /proc/ 内のディレクトリ

カーネルに関する情報の共通グループは、/proc/ ディレクトリ内のディレクトリ及びサブディレクトリにグループ化されます。

E.3.1. プロセスディレクトリ

/proc/ ディレクトリには、数値名が付いた数多くのディレクトリが格納されています。この一覧は以下のような内容です:
dr-xr-xr-x    3 root     root            0 Feb 13 01:28 1
dr-xr-xr-x    3 root     root            0 Feb 13 01:28 1010
dr-xr-xr-x    3 xfs      xfs             0 Feb 13 01:28 1087
dr-xr-xr-x    3 daemon   daemon          0 Feb 13 01:28 1123
dr-xr-xr-x    3 root     root            0 Feb 13 01:28 11307
dr-xr-xr-x    3 apache   apache          0 Feb 13 01:28 13660
dr-xr-xr-x    3 rpc      rpc             0 Feb 13 01:28 637
dr-xr-xr-x    3 rpcuser  rpcuser         0 Feb 13 01:28 666
これらのディレクトリは、プログラムのプロセス ID にちなんで名付けられ、そのプロセス固有の情報が含まれているため、プロセスディレクトリ と呼ばれています。各プロセスディレクトリのオーナーとグループは、そのプロセスを実行しているユーザーに設定されます。プロセスが終了すると、そのプロセスの /proc/ プロセスディレクトリはなくなります。
各プロセスディレクトリには以下のファイルが格納されています:
  • cmdline — プロセスを起動した際に発行されたコマンドが格納されています。
  • cwd — そのプロセスの現在の作業ディレクトリへのシンボリックリンク。
  • environ — そのプロセスの環境変数の一覧。環境変数はすべて大文字で、値は小文字で記載されます。
  • exe — そのプロセスの実行可能ファイルへのシンボリックリンク。
  • fd — 特定のプロセスの全ファイル記述子を格納するディレクトリ。これらは、番号付きリンクの形式で表示されます:
    total 0
    lrwx------    1 root     root           64 May  8 11:31 0 -> /dev/null
    lrwx------    1 root     root           64 May  8 11:31 1 -> /dev/null
    lrwx------    1 root     root           64 May  8 11:31 2 -> /dev/null
    lrwx------    1 root     root           64 May  8 11:31 3 -> /dev/ptmx
    lrwx------    1 root     root           64 May  8 11:31 4 -> socket:[7774817]
    lrwx------    1 root     root           64 May  8 11:31 5 -> /dev/ptmx
    lrwx------    1 root     root           64 May  8 11:31 6 -> socket:[7774829]
    lrwx------    1 root     root           64 May  8 11:31 7 -> /dev/ptmx
    
  • maps — そのプロセスに関連した様々な実行可能ファイル及びライブラリファイルへのメモリマップの一覧。このファイルは、プロセスの複雑度によっては、かなり長くなる場合があります。sshd プロセスからの出力例は以下のような内容で始まります:
    08048000-08086000 r-xp 00000000 03:03 391479     /usr/sbin/sshd
    08086000-08088000 rw-p 0003e000 03:03 391479	/usr/sbin/sshd
    08088000-08095000 rwxp 00000000 00:00 0
    40000000-40013000 r-xp 0000000 03:03 293205	/lib/ld-2.2.5.so
    40013000-40014000 rw-p 00013000 03:03 293205	/lib/ld-2.2.5.so
    40031000-40038000 r-xp 00000000 03:03 293282	/lib/libpam.so.0.75
    40038000-40039000 rw-p 00006000 03:03 293282	/lib/libpam.so.0.75
    40039000-4003a000 rw-p 00000000 00:00 0
    4003a000-4003c000 r-xp 00000000 03:03 293218	/lib/libdl-2.2.5.so
    4003c000-4003d000 rw-p 00001000 03:03 293218	/lib/libdl-2.2.5.so
    
  • mem — プロセスによって確保されているメモリ。このファイルは、ユーザーには読み取れません。
  • root — そのプロセスの root ディレクトリへのリンク。
  • stat — プロセスの状態。
  • statm — プロセスが使用中のメモリの状態。/proc/statm ファイルのサンプルは以下のようになります:
    263 210 210 5 0 205 0
    
    7 つのカラムは、そのプロセスの異なるメモリ統計に関連しています。これらのカラムは、左から右の順に、以下のような使用メモリに関する情報をレポートしています:
    1. プログラムの合計サイズ (キロバイト単位)
    2. メモリポーションのサイズ (キロバイト単位)
    3. 共有されているページ数
    4. コードのページ数
    5. データ/スタックのページ数
    6. ライブラリページの数
    7. ダーティページの数
  • statusstatstatm よりも読みやすい形式で記載されたプロセスの状態。sshd の出力例は以下の通りです:
    Name:	sshd
    State:	S (sleeping)
    Tgid:	797
    Pid:	797
    PPid:	1
    TracerPid:	0
    Uid:	0	0	0	0
    Gid:	0	0	0	0
    FDSize:	32
    Groups:
    VmSize:	    3072 kB
    VmLck:	       0 kB
    VmRSS:	     840 kB
    VmData:	     104 kB
    VmStk:	      12 kB
    VmExe:	     300 kB
    VmLib:	    2528 kB
    SigPnd:	0000000000000000
    SigBlk:	0000000000000000
    SigIgn:	8000000000001000
    SigCgt:	0000000000014005
    CapInh:	0000000000000000
    CapPrm:	00000000fffffeff
    CapEff:	00000000fffffeff
    
    この出力に記載されている情報には、プロセスの名前と ID、状態 (S (スリープ中)R (実行中) など)、プロセスを実行しているユーザー/グループ ID、メモリの使用状況に関する詳細情報などが含まれます。

E.3.1.1. /proc/self/

/proc/self/ ディレクトリは、現在実行中のプロセスへのリンクです。これにより、プロセス ID を知らなくても、プロセスが自ら確認することができます。
シェル環境では、/proc/self/ ディレクトリを表示すると、そのプロセスのプロセスディレクトリを表示するのと同じ内容が表示されます。