プロセスID

読み:プロセス・アイディー
外語:PID: process ID
品詞:名詞

プロセスを識別するために使われる、一意の番号のこと。PID、プロセス識別子とも。以下、PIDとする。

PIDは、waitpid()やkill()、あるいはsigsend()といったシステムコールの引数であり、ある特定のプロセスに対して何らかの処理を要求する場合、そのプロセスの特定のために使われる。

但し、あるプロセスから特定の他のプロセスのPIDを得る方法はなく、このためプロセスは、必要に応じてプロセスIDを書いたファイルを用意する。例えば、syslogdなら「/var/run/syslogd.pid」、httpdなら「/var/run/httpd.pid」、といった具合である。なお、このパス名は環境依存であり、OSによっては異なる場所に置かれる場合がある。

取得方法

UNIXfork(2)システムコールを呼び出しすと、新たに生成された子プロセスのPIDが、fork(2)をした親プロセスに返される。

またUNIXの場合、自分のPIDはgetpid()で、親プロセスのPIDはgetppid()で、それぞれ随時取得できる。

C/C++では、PIDはpid_t型である。その大きさは実装依存だが、あるシステムでは、pid_t型はlong型のtypedefである。

番号範囲

UNIXでは、initプロセスがPID 1で、以降PIDはプロセスが生成されるたびに大きな値を作り、附番される。上限まで使われると、再び小さい番号に戻り、その中で空いている番号を順次つまみ食いしてゆくことになる。

上限はシステムによって異なるが、符号付きshortなら0〜32767までである。符号付きlongならより多くを扱えるが、例えばFreeBSDなら5桁の制限があり、つまり0〜99999までしか利用できない。

/proc

UNIXでは、/procディレクトリ以下に、現在ある全てのプロセスについての情報が置かれている。具体定期には、/proc/<PID>というディレクトリ(例えば、「/proc/12345」)があるように見え、この下に各種の情報がファイルの形であるように見える。

例えばUnixWareの場合、次のようになる。

-rw-------    1 root     root      585728 Feb 27 13:50 as
-r--------    1 root     root          32 Feb 27 13:50 cred
--w-------    1 root     root           0 Feb 27 13:50 ctl
dr-xr-xr-x    1 root     root           0 Feb 27 13:50 lwp
-r--------    1 root     root        2436 Feb 27 13:50 map
dr-x------    1 root     root           0 Feb 27 13:50 object
-r--r--r--    1 root     root         260 Feb 27 13:50 psinfo
-r--------    1 root     root        1088 Feb 27 13:50 sigact
-r--------    1 root     root        1152 Feb 27 13:50 status

Linuxなどでは、更に多くの情報が参照できる。