Wenn wir tippen, erhalten ps -ef
wir eine Liste von Prozessen. Warum sind die PID-Nummern nicht fortlaufend?
Wenn wir tippen, erhalten ps -ef
wir eine Liste von Prozessen. Warum sind die PID-Nummern nicht fortlaufend?
Antworten:
Unter Ubuntu sind sie durchgehend. Bei anderen Betriebssystemen kann dies abweichen.
Der Kernel weist PIDs im Bereich von (RESERVED_PIDS, PID_MAX_DEFAULT) zu. Dies geschieht nacheinander in jedem Namespace (Tasks in verschiedenen Namespaces können die gleichen IDs haben). Wenn der Bereich erschöpft ist, wird die PID-Zuweisung umgebrochen.
( /programming/3446727/how-does-linux-determine-the-next-pid )
Aber was solls ...
Einige Themen zum Stackoverflow:
In den Kommentaren befindet sich ein Befehl zum Testen der Zuweisung von PIDs:
for i in {1..20}; do sh -c 'echo $$'; done
Normalerweise ist die PID kontinuierlich, aber einige Prozesse sind bereits zum Zeitpunkt der Ausführung des Befehls beendet ps -ef
.
Einige Prozesse können auch nur ein Unterprozess eines anderen Prozesses sein, der im ps -ef
Befehl nicht angezeigt wird . Um ein erweitertes Ergebnis zu erhalten und die kontinuierliche PID zu überprüfen, verwenden Sie diepstree
pstree -p
Beispielausgabe:
├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│ ├─{teamviewerd}(3475)
│ ├─{teamviewerd}(3476)
│ ├─{teamviewerd}(3477)
│ ├─{teamviewerd}(3478)
während, wenn Sie ausführen, sehen ps -ef
Sie nur den übergeordneten Prozess.
$ ps -ef | grep teamviewerd
root 3468 1 0 Jul15 ? 00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f
Sie sind kontinuierlich. Die PID werden der Reihe nach zugewiesen, bis die maximale Grenze erreicht ist. Nach dieser Grenze beginnt es wieder bei Null.
Es ist also nur so, dass die fehlenden PIDs in ps -ef
toten Prozessen sind. Beachten Sie, dass ps -ef
nur laufende Prozesse aufgelistet werden.