コンピューティングにおいて、プロセス識別子(別名プロセス IDまたはPID)は、Unix、macOS、Windowsなどのほとんどのオペレーティング システム カーネルによって、アクティブなプロセスを一意に識別するために使用される番号です。この番号は、さまざまな関数呼び出しのパラメーターとして使用でき、プロセスの優先度を調整したり、プロセスを完全に強制終了したりするなど、プロセスを操作できます。
Unixライク
Unix 系オペレーティング システムでは、fork() システム コールによって新しいプロセスが作成されます。PID は親プロセスに返され、それ以降の関数呼び出しで子プロセスを参照できるようになります。親プロセスは、たとえば 関数を使用して子プロセスが終了するのを待ったりwaitpid()、 でプロセスを終了したりできますkill()。
特別に区別されたプロセス ID を持つタスクが 2 つあります。PID 0 はswapperまたはschedに使用されます。これらはカーネルの一部であり、CPU コアに他に何もすることがないときにいつでも CPU コア上で実行されるプロセスです。[1] Linux では、このプロセスのスレッドもアイドル タスクと呼ばれます。 [ 2]一部の API では、PID 0 は呼び出し元のスレッド、プロセス、またはプロセス グループを常に参照する特別な値としても使用されます。[3] [4]プロセス ID 1 は通常、システムの起動とシャットダウンを主に担当するinitプロセスです。元々、プロセス ID 1 は技術的な手段によって init 用に特に予約されていたわけではなく、カーネルによって呼び出される最初のプロセスであるという自然な結果としてこの ID が割り当てられていただけです。最近の Unix システムでは通常、「プロセス」として見える追加のカーネル コンポーネントがあり、その場合は PID 1 は古いシステムとの一貫性を保つために init プロセス用に積極的に予約されています。
プロセスIDは、通常、0から始まり、システムによって異なる最大値まで増加する、シーケンシャルに割り当てられます[5] 。この制限に達すると、割り当ては300から再開し、再び増加します。macOSとHP-UXでは、割り当ては100から再開します。 [6]ただし、このパス と後続のパスでは、プロセスにまだ割り当てられているPIDはスキップされます。システムに関する情報を抽出したり、メッセージをプロセス間で秘密裏に渡したりできるため、これは潜在的なセキュリティ上の脆弱性であると考える人もいます。そのため、セキュリティを特に考慮する実装では、PIDの割り当てに別の方法を選択する場合があります。[7] MPE/iXなどの一部のシステムでは、メモリ内のプロセス情報カーネルページの数を最小限に抑えるために、使用可能な最小のPIDが使用されることがあります。
現在のプロセスIDはgetpid()システムコール[8]によって提供されるか、シェルの変数として提供$$されます。親プロセスのプロセスIDはgetppid()システムコールによって取得できます。[9]
Linuxでは、最大プロセスIDは疑似ファイルによって与えられます/proc/sys/kernel/pid_max。[10]
ピッドファイル
一部のプロセス、たとえばmoc音楽プレーヤーやMySQLデーモンは、他のプロセスが検索できるように、PID を文書化されたファイルの場所に書き込みます。[引用が必要]
マイクロソフトウィンドウズ
Windowsファミリのオペレーティング システムでは、 Windows APIGetCurrentProcessId()の関数を使用して現在のプロセスの ID を取得できます[11]。また、他のプロセスの ID は で取得できます[12]。内部的には、プロセス ID はクライアント IDと呼ばれ、スレッドID と同じ名前空間から割り当てられるため、これら 2 つが重複することはありません。システム アイドル プロセスにはプロセス ID 0 が与えられます。システム プロセスには、 Windows 2000ではプロセス ID 8 、 Windows XPおよびWindows Server 2003ではプロセス ID 4が与えられます[13]。Windows NT ファミリのオペレーティング システムでは、プロセス識別子とスレッド識別子はすべて 4 の倍数ですが、これは仕様の一部ではありません。[14]GetProcessId()
参照
- ユーザー識別子(UID)
- グループ識別子(GID)
- ハンドル(コンピューティング)
- プログラムセグメントプレフィックス(PSP)
参考文献
- ^ PID 0とは何ですか?
- ^ Linux カーネル コード: tools/perf/builtin-sched.c、
pid 0 == swapper == アイドル タスク
- ^ kill(2) — Linux マニュアルページ
- ^ sched_setscheduler(2) — Linux マニュアルページ
- ^ pid_namespaces(7) — Linux マニュアルページ
- ^ 「Mac OS Xの最大PIDはいくらですか?」。Ask Different 。 2024年11月2日閲覧。
- ^ comp.unix.aix よくある質問、 2008-07-21取得
- ^ 「getpid」、The Open Group Base Specifications Issue 7、2018年版
- ^ 「getppid」、The Open Group Base Specifications Issue 7、2018年版
- ^ 「proc - プロセス情報疑似ファイルシステム」、Linux プログラマーズ マニュアル、 2009 年 12 月 28 日取得
- ^ 「GetCurrentProcessId 関数」、Windows Dev Center、Microsoft、2018 年 12 月 5 日
- ^ 「GetProcessId 関数」、Windows Dev Center、Microsoft、2018 年 12 月 5 日
- ^ Russinovich, Mark ; David A. Solomon (2005)、「第 2 章: システム アーキテクチャ」、Microsoft Windows Internals (第 4 版)、Microsoft Press、p. 76、ISBN 0-7356-1917-4
- ^ Chen, Raymond (2008-02-28)、「プロセス ID とスレッド ID が 4 の倍数になるのはなぜか?」、The Old New Thing、Microsoft
