入力ps -ef
すると、プロセスのリストが取得されます。PID番号が連続していないのはなぜですか?
入力ps -ef
すると、プロセスのリストが取得されます。PID番号が連続していないのはなぜですか?
回答:
Ubuntuでは継続的です。他のオペレーティングシステムでは異なる場合があります。
カーネルは、(RESERVED_PIDS、PID_MAX_DEFAULT)の範囲でPIDを割り当てます。これは各名前空間で順番に行われます(異なる名前空間のタスクは同じIDを持つことができます)。範囲が使い果たされた場合、pidの割り当ては折り返します。
(/programming/3446727/how-does-linux-determine-the-next-pid)
でも気をつけて...
stackoverflowに関するいくつかのトピック:
コメントには、PIDの割り当てをテストするコマンドがあります。
for i in {1..20}; do sh -c 'echo $$'; done
通常、PIDは継続的ですが、コマンドを実行するまでに一部のプロセスが停止しますps -ef
。
また、一部のプロセスは、ps -ef
コマンドに表示されていない別のプロセスのサブプロセスである場合があります。拡張された結果を確認し、連続PIDを確認するには、pstree
pstree -p
サンプル出力:
├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│ ├─{teamviewerd}(3475)
│ ├─{teamviewerd}(3476)
│ ├─{teamviewerd}(3477)
│ ├─{teamviewerd}(3478)
一方、実行ps -ef
すると、親プロセスのみが表示されます。
$ ps -ef | grep teamviewerd
root 3468 1 0 Jul15 ? 00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f