Pro*C
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2017/09/21 23:38 UTC 版)
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(2017年8月) |
Pro-C ( Pro-C/C++)とはOracleデータベース のデータベース管理システムの埋め込みSQLに対応したプログラミング言語である。Pro*Cはベースの言語としてC または C++ を使用している。コンパイル時は埋め込みSQL文をプリコンパイラで一度プリコンパイルしたソースを、さらにコンパイルし、C、C++言語のSQLライブラリを読み込む処理を行う。Pro*Cプリコンパイラによって生成されたコードは標準的なC 、C++のコードであり、再度C、C++のコンパイラでコンパイルする事で実行できるようになる。
外部リンク
procfs
(Pro*c から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/27 14:21 UTC 版)
ナビゲーションに移動 検索に移動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
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 にマウントされていなければならない。
*BSD
- FreeBSD 及び OpenBSD ではデフォルトで procfs はマウントされない[4]。
- NetBSD 及び DragonFlyBSD ではマウントされるが、ファイル構造が異なる。
脚注
参考文献
- Unix 8th Edition proc(2) manual page - 最初のprocfs
- Plan 9 procfs manual page - Plan 9 で拡張されたprocfs
- Linux Manual Pages Proc(5) Linux のprocfsのマニュアル
- Documentation/filesystems/proc.txt procfs についてのLinuxカーネル文書
外部リンク
- A brief history of /proc Eric Schrock's Weblog
- Access the Linux kernel using the Procfs An IBM developerWorks article by M. Tim Jones
- Linux-Filesystem-Hierarchy Linux Documentation Project
- Creating and using proc files - an article from the Real-Time Embedded blog
- Using the proc filesystem An article by Pétur I. Egilsson
/proc
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/21 14:05 UTC 版)
「Plan 9 from Bell Labs」の記事における「/proc」の解説
/proc ディレクトリには動作中プロセスの一覧があり、それぞれの状態を示している。いわゆる「プロセスファイルシステム(procfs)」と呼ばれるもので、標準化はされておらず詳細は異なるが、Linuxその他多くのUnixでも採用されている。プロセスは名前付きのオブジェクト(infoファイルやcontrolファイルのあるサブディレクトリ)として /proc 配下にあり、他のカーネルリソースと共に動的I/Oチャネルもあり、ユーザーはそれにコマンドを送ったり、データを読み取ったりできる。ユーザーは一部のシステムコールを使ったプログラムをコンパイルしてカーネルとやり取りする必要はなく、ls や cat といったコマンドでプロセスを検索し、操作することができる。 他のマシンの /proc ディレクトリは他の特殊なファイルシステムと同様、ユーザーの名前空間にマウントでき、ローカルにあるかのようにそれを使うことができる。これにより、複数のマシンから成る分散コンピューティング環境ができる。ユーザーの机上にある端末、データを格納してあるファイルサーバ、高速CPUや認証やゲートウェイなどのその他サーバ群などがあり、それら全てがユーザーが見慣れたディレクトリ階層を使っている。ユーザーはファイルサーバやサーバで動作中のアプリケーションやネットワーク上のプリンターなどを集め、端末上の個人的名前空間にそれらをまとめることができる。
※この「/proc」の解説は、「Plan 9 from Bell Labs」の解説の一部です。
「/proc」を含む「Plan 9 from Bell Labs」の記事については、「Plan 9 from Bell Labs」の概要を参照ください。
- Pro*cのページへのリンク