プロセス識別子

プロセス識別子（プロセスしきべつし、プロセスID、PIDと略記）は、いくつかのオペレーティングシステムカーネル（Unix系やWindows）で使われている番号で、ある時点で存在するプロセスを一意に識別するために用いられる。優先順位を調整したり、終了させたり等、プロセス（群）を操作する様々な関数の引数として使う。
概要.
Unix系OSでは、新たなプロセスは codice_1 システムコールで生成される。そのときに生成された子プロセスのPIDがシステムコールを行った親プロセスに戻り値として返される。すると親プロセスは例えば、子プロセスの終了を codice_2 関数で待ち合わせたり、codice_3 でプロセスを終了させたりする。
Unix系OSでは、プロセス識別子 0 と 1 は特別なタスクを指している。プロセス識別子 0 は "swapper" または "sched" と呼ばれ、ページングを担当している。これは実はカーネルの一部であり、ユーザーモードのプロセスではない。プロセス識別子 1 は init プロセスで、主にシステムの立ち上げとシャットダウンを担当している。本来、プロセス識別子 1 は init のために予約されていたわけではなく、単にカーネルが最初に起動するプロセスだったためにこのPIDが init に付与されただけだった。最近のUnix系OSはカーネルの複数のコンポーネントをプロセスとして見せていることがある。その場合、PID 1 は init プロセス用に積極的に予約されていて、古いシステムとの互換性を保っている。カーネルスレッドをサポートするシステムでは、カーネルの複数のプロセスはスレッドとして識別され、プロセス識別子は0しか使用しないこともある。
Unix系OSでは、プロセス識別子はプロセスが生成される順に0から始めて値の小さいほうから付けていく。PIDの最大値はシステムによって異なる。最大値まで使ったとき、PID割り当ては例えば300に戻されて、再び増加していく。macOS や HP-UX では巻き戻し時の開始番号は100となっている。そのとき、現存しているプロセスが使用中のPIDはスキップして二重に割り当てないようにする。この性質を利用してシステムに関する情報を抽出可能であり、このことが潜在的なセキュリティ上の脆弱性だと考える者もいる。そのため、セキュリティ強化を心がけた実装をする場合、PID割り当て方針を通常とは異なるものにすることもある。MPE/iX などのシステムでは、利用可能な最小のPIDを使用し（つまり、終了したプロセスのPIDを即座に再利用することがある）、メモリ上のプロセス情報のカーネルページ数を最小化する。
Microsoft Windows では、自身のプロセス識別子は codice_4 というAPIで取得し、他のプロセスのプロセス識別子は codice_5 というAPIで取得する。内部的にはプロセス識別子を "client ID" と呼び、"thread ID" と同じ名前空間から割り当てられるので、両者は決してオーバーラップしない。いわゆるのプロセス識別子は0で、システムプロセスのプロセス識別子は4が割り当てられる。
Unix系OSでは、自身のプロセス識別子は codice_6 システムコールで得られ、シェルでは codice_7 という変数で得られる。親プロセスのプロセス識別子は codice_8 システムコールで得られる。
Linuxでは、プロセス識別子の最大値は擬似ファイル にある。
pidファイル.
長時間動作し続けるプロセス（例えば MySQL デーモンなど）は、自身のPIDをファイルに書いておき、他のプロセスが参照できるようにしていることがある。