プロセス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までしか利用できない。

procfs
 UNIXでは、procfsをマウントすると、プロセスの情報がファイルの形式で得られるようになる。
 通常は、/procディレクトリ以下にマウントする。

PIDから名前を得る方法
 pidを与えてプロセスの名前(psコマンドで出てくるname相当)を簡単に得る方法はない。
 UNIXはそのようなAPIを用意していないため、汎用性の高い方法はない。
 Linuxならばアプリケーションからprocfsにアクセスする方法が最も現実的で、PIDから名前を得る幾つかの方法は、次のとおりである。
 この中で最も現実的なのはcmdlineから得る方法かと思われ、Linuxのpsコマンドや、Ubuntuなどの「システム・モニタ」といったソフトウェアは、この情報を表示しているようである。
 実際の取得方法は、次の通り。あらかじめ、pid_t型の変数 pid に必要なPIDが入っているものとする。
char buf[32];
int fd;
snprintf(buf, sizeof buf, "/proc/%d/cmdline", pid);
fd = open(buf, O_RDONLY);
*buf = '\0';
if (fd) {
    read(fd, buf, (sizeof buf) - 1);
    buf[(sizeof buf) - 1] = '\0';
    close(fd);
}
 確保したbufのサイズに応じて名前が得られる。

再検索