Werden Prozess-IDs recycelt? Was ist, wenn Sie die maximale ID erreichen?

7

Prozess-IDs nehmen streng zu, aber wenn Ihr System lange genug läuft und viele Prozesse beendet und gestartet werden, können Sie irgendwann die Grenze des zugrunde liegenden Integraltyps erreichen (auf meinem System scheint es sich um ein vorzeichenbehaftetes Int zu handeln) Es würde keine größere PID geben. Würde dies dazu führen, dass alte nicht verwendete IDs (von abgeschlossenen Prozessen) recycelt werden (dh ein zweites Mal ausgegeben werden)? Was ist, wenn jemand darauf wartet, dass diese PID endet, aber nicht lange eingecheckt hat?

Bitmaske
quelle
Dies scheint ein nahezu Duplikat von unix.stackexchange.com/questions/22425/…
Bruce Ediger

Antworten:

7

Prozess-IDs nehmen unter keinem mir bekannten UNIX-ähnlichen Betriebssystem strikt zu. Ihre Frage basiert auf einer falschen Annahme.

Die einzigen Anforderungen an Prozess-IDs sind:

Eine Prozess-ID darf vom System erst nach Ablauf der Prozesslebensdauer wiederverwendet werden. Wenn eine Prozessgruppe vorhanden ist, deren Prozessgruppen-ID dieser Prozess-ID entspricht, wird die Prozess-ID vom System erst wieder verwendet, wenn die Lebensdauer der Prozessgruppe endet. Ein Prozess, der kein Systemprozess ist, darf keine Prozess-ID von 1 haben.

David Schwartz
quelle
2
Nein, das ist unmöglich. Der Prozess wird erst abgeschlossen, wenn der Exit-Wert dem übergeordneten Element gemeldet wird. Das ist eine seiner Aufgaben, und bis es das getan hat, ist es noch nicht fertig.
David Schwartz
1
@ DavidSchwartz - nicht sicher, wie lesbar dies in einem Kommentar sein wird, aber - Linux ist ziemlich sequentiell. [adrian @ iceweasel ~] $ a.out 24506 [adrian @ iceweasel ~] $ a.out 24507 [adrian @ iceweasel ~] $ a.out 24508 [adrian @ iceweasel ~] $ a.out 24509 [adrian @ iceweasel ~] $ cat pid.cc #include <stdio.h> #include <sys / types.h> #include <unistd.h> int main (int argc, char * argv []) {printf ("% d \ n", getpid ()); return 0; }
Adrian Cornish
1
Die meisten Betriebssysteme sind sequentiell, bis sie umlaufen. Einige reservieren bestimmte Bereiche für Prozesse unterschiedlicher Art. Einige waren zufällig.
David Schwartz
1
@DavidSchwartz - Das war mein Punkt - Sie sagten "steigen auf keinem UNIX-ähnlichen Betriebssystem, von dem ich weiß" - Sie erinnern sich an diese Super-Sicherheitslücke in Debian, weil sie die PID als Salz für das Hashing verwendeten ;-) - mit nur 65K PID ist nicht das beste Salz
Adrian Cornish
1
Ja, sie nehmen auf einem mir bekannten UNIX-ähnlichen Betriebssystem nicht strikt zu. Wenn Sie einen kennen, bei dem sie streng zunehmen, haben Sie ihn noch nicht erwähnt. ( Streng zu erhöhen bedeutet, dass sie nie abnehmen.) Ich könnte mir ein Betriebssystem mit 64-Bit-PIDs vorstellen, das das tut, aber ich kenne keine.
David Schwartz