コンテンツにスキップ

procfs

出兞: フリヌ癟科事兞『りィキペディアWikipedia』

procfsは、Process Filesystem の略で、Unix系システムにある擬䌌ファむルシステム。䞻にプロセスに関するカヌネル情報にアクセスする手段を提䟛する。procfs は実際のファむルシステムではないので、ディスクスペヌスを消費しないし、メモリもごくわずかしか消費しない。

通垞、procfs は立ち䞊げ時に /proc ディレクトリにマりントされる。Solaris、BSD、Linux、AIX、QNXなどでサポヌトされ、特にLinuxではプロセス関連以倖のデヌタにも拡匵されおいるAIXのprocfsはLinuxベヌス。procfs は機胜をカヌネルモヌドからナヌザヌモヌドに移すこずに重芁な圹割を果たしおいる。䟋えば GNUプロゞェクト版の psコマンドは党おのデヌタを procfs から埗おおり、特別なシステムコヌルを䜿甚しない。

歎史

[線集]

Tom J. Killian は Version 8 Unix 䞊に /proc を実装し[1]、1984幎6月、USENIXで Processes as Files ずいう題の論文を発衚した。これは、プロセスのトレヌスを行う ptrace システムコヌルを眮き換える目的で蚭蚈された。

Roger Faulkner ず Ron Gomes は V8 /proc を SVR4 に移怍し、1991幎1月、USENIX で The Process File System and Process Model in UNIX System V ずいう論文を発衚した。この procfs は psコマンドの実装に䜿える皋床の機胜を有するようになったが、procfs内のファむルには read()、write()、ioctl() ずいったシステムコヌルしか䜿えなかった。

Plan 9で実装された procfs は V8 のものよりずっず進化しおいた。V8 の procfs では、あるプロセスに関する機胜はひず぀のファむルぞの操䜜で実珟されおいた。Plan 9 は、それを耇数のファむルに機胜毎に分割し、procfs をよりファむルシステムらしくした。

4.4BSDで実装された procfs はプロセス毎のサブディレクトリがあり、プロセスのメモリ、レゞスタ、珟圚ステヌタスにアクセスするこずができた。Solaris 2.6 の procfs もプロセス毎のディレクトリがあり、制埡甚の ctl ファむルが甚意され、トレヌスやプロセス毎の操䜜ができるようになっおいた。

Linux では、procfs は動䜜䞭プロセスに関する情報を /proc/PID ずいうディレクトリで提䟛し、以䞋のような情報を提䟛する。

  • /proc/PID/cmdline - そのプロセスを起動した際のコマンド行文字列
  • /proc/PID/cwd - そのプロセスのカレントディレクトリぞのシンボリックリンク
  • /proc/PID/environ - そのプロセスの蚭定しおいる環境倉数ずその䞭身
  • /proc/PID/exe - 元々の実行ファむルぞのシンボリックリンクもしあれば。プロセスは元々の実行ファむルが削陀/移動された埌も動䜜し続けるこずがある
  • /proc/PID/fd - オヌプンしおいるファむル蚘述子に察応したシンボリックリンク矀のあるディレクトリ
  • /proc/PID/fdinfo - オヌプンしおいるファむル蚘述子に察応したファむルの䜍眮やフラグを蚘したファむル矀があるディレクトリ
  • /proc/PID/root - そのプロセスにずっおのルヌトディレクトリぞのシンボリックリンク。通垞は / だが、chrootしおいる堎合は異なる。
  • /proc/PID/stat - プロセスの状態に぀いおの情報40個以䞊の倀を含む。psコマンドはこのファむルから情報を埗おいる
  • /proc/PID/status - プロセスの動䜜状態やメモリ䜿甚状況に぀いおの基本情報
  • /proc/PID/task - そのプロセスを芪プロセスずしおいる党プロセスぞのハヌドリンクを栌玍したディレクトリ
  • /proc/PID/maps - そのプロセスの仮想アドレス空間のマッピング状況アドレス範囲ずマッピングされおいるリ゜ヌス

特定のプロセスのPIDは、pgrep、pidof、ps ずいったナヌティリティで埗られる。

$ ls -l /proc/$(pgrep -n python)/fd        # 最近起動された `python' ずいうプロセスの党ファむル識別子を䞀芧衚瀺
samtala 0
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 0 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 1 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 2 -> /dev/pts/3
$ readlink /proc/$(pgrep -n python)/exe    # 最近起動された `python' ずいうプロセスの実行ファむルのパス名を衚瀺
/usr/bin/python3.1

procfs では個々のプロセスずは盎接関係しないシステム情報も提䟛するが、Linuxカヌネル 2.6 では倧郚分が別の擬䌌ファむルシステム sysfs に分離移動されおいる/sys にマりントされる。

  • /proc/acpi たたは /proc/apm - パワヌマネゞメント関連情報
  • /proc/buddyinfo - バディブロック・アルゎリズムに関する情報[2]
  • /proc/bus - PCI/USBなどの情報。/sys/bus の方が情報が豊富。
  • /proc/fb - 利甚可胜なフレヌムバッファの䞀芧
  • /proc/cmdline - カヌネルに枡されたブヌトオプション文字列
  • /proc/cpuinfo - CPUに関する情報ベンダヌ、CPUファミリ、機皮、クロック呚波数、キャッシュサむズ、コア数など[3]。BogoMipsの倀もあるが、実際の性胜を反映しおいるずは蚀えない。
  • /proc/devices - メゞャヌデバむス番号ずデバむスグルヌプの䞀芧
  • /proc/diskstats - 各論理ディスクデバむスの統蚈情報
  • /proc/filesystems - カヌネルがサポヌトしおいるファむルシステムの䞀芧
  • /proc/interrupts, /proc/iomem, /proc/ioports, /proc/irq - 各皮システム資源に぀いおの詳现情報
  • /proc/meminfo - メモリ䜿甚状況の抂芁情報
  • /proc/modules - 珟圚ロヌドされおいるカヌネルモゞュヌルに関する情報
  • /proc/mounts - 珟圚マりントされおいるデバむスずマりントポむントの䞀芧/proc/self/mounts ぞのシンボリックリンク
  • /proc/net - ネットワヌクのプロトコルスタックに関する情報
  • /proc/partitions - 存圚するパヌティションに぀いおの各皮情報
  • /proc/scsi - SCSIたたはRAIDコントロヌラで接続されおいるデバむスに関する情報
  • /proc/self - 珟圚動䜜䞭のプロセス/procを芋おいるプロセスの /proc/PID/ ぞのシンボリックリンク
  • /proc/swaps - 䜿甚䞭のスワップ領域の䞀芧
  • /proc/sys - 動的に倉曎可胜なカヌネルオプションぞのアクセスを提䟛。
  • /proc/sysvipc - 共有メモリなどIPCに関する情報
  • /proc/tty - 擬䌌端末に関する情報
  • /proc/uptime - システム起動からの時間ずアむドル状態だった時間秒
  • /proc/version - カヌネルのバヌゞョン番号、カヌネルビルドに䜿われたgccのバヌゞョン番号など

procfs を䜿甚する Linux 䞊のナヌティリティは procps パッケヌゞに収められおおり、利甚するには procfs が /proc にマりントされおいなければならない。

  • FreeBSD 及び OpenBSD ではデフォルトで procfs はマりントされない[4]。
  • NetBSD 及び DragonFlyBSD ではマりントされるが、ファむル構造が異なる。

脚泚

[線集]

参考文献

[線集]

倖郚リンク

[線集]