概要
procfs(Process Filesystem)は、Unixおよび
Unix系システムに搭載されている擬似
ファイルシステムです。このシステムは主に
プロセスに関連した
カーネル情報へのアクセス手段を提供し、物理的な
ファイルシステムとは異なり、ディスクスペースを消費することはありません。procfsは通常、システム起動時に`/proc`ディレクトリとしてマウントされ、
Linux、
Solaris、BSD、
AIX、
QNXなどの多くの
Unix系オペレーティングシステムで利用可能です。特に
Linuxにおいては、
プロセス情報だけでなく、他のシステムデータも扱えるように拡張されています。
歴史
procfsの歴史は、
1984年にTom J. KillianがVersion 8 Unix上で実装したことに遡ります。彼は
USENIXで発表した論文「Processes as Files」で、このシステムの目的や設計理念を示しました。続いて、Roger FaulknerとRon GomesはV8のprocfsをSVR4に移植し、
1991年には
USENIXで「The Process File System and Process Model in UNIX System V」と題した論文を発表しました。この移植は`ps`コマンドの実装に用いられ、当初は限られたシステムコールのみがサポートされていました。
Plan 9では、procfsがさらに進化を遂げました。こちらでは、機能が複数のファイルに分割され、より
ファイルシステムらしい構造が実現されました。4.4BSDの実装にもサブディレクトリが設けられ、
プロセスごとの詳細情報にアクセス可能となりました。
Solaris 2.6でも同様の機能が追加されました。
Linuxにおけるprocfsの役割
Linuxにおいては、procfsは`/proc/PID`といったディレクトリで動作中の
プロセスに関する情報を提供します。具体的には、
プロセスが起動した際のコマンドラインやカレントディレクトリ、環境変数、オープンしているファイルの情報などが含まれます。特に`/proc/PID/stat`や`/proc/PID/status`は、
プロセスの状態やメモリの使用状況についての詳細なデータを提供します。
以下は、
Linuxにおけるprocfsの主要なファイルとその内容です:
- - /proc/PID/cmdline: プロセス起動時のコマンドライン文字列
- - /proc/PID/cwd: 現在のディレクトリへのシンボリックリンク
- - /proc/PID/environ: 環境変数の一覧
- - /proc/PID/exe: 元の実行ファイルへのリンク
- - /proc/PID/fd: オープンしているファイル記述子のリンク
- - /proc/PID/maps: 仮想アドレス空間のマッピング情報
これらの情報は、`pgrep`や`ps`といったユーティリティを用いて取得できます。さらに、procfsではシステムに関するさまざまな情報も提供しており、
Linuxカーネル2.6以降ではこれらの多数が別の擬似
ファイルシステムである`sysfs`に移行しています。
BSD系システムにおけるprocfs
BSD系オペレーティングシステムにおいては、FreeBSDや
OpenBSDはデフォルトではprocfsをマウントしていません。しかし、
NetBSDやDragonFlyBSDではprocfsがマウントされており、ファイル構造は
Linuxとは異なります。これにより、それぞれのシステムにおける
プロセス管理方法に個性が現れています。
結論
procfsは、
Unix系システムにおける
プロセスの監視や管理、システム情報の取得において不可欠な要素です。この擬似
ファイルシステムは、システムの透明性を高め、開発者がより効果的にシステムを操作および最適化できるように支援しています。