Was bestimmt, welcher PID ein Prozess zugewiesen wird?


7

Was bestimmt, welcher PID ein Prozess zugewiesen wird?

Es scheint, als gäbe es eine Obergrenze für den ganzzahligen Wert, der für die ID verwendet wird. Was ist diese Grenze und wo ist sie definiert?

Gibt es einen Bereich, der für Prozesse reserviert ist, die nicht vom Benutzer erstellt wurden?

Um ganz klar zu sein, ich frage dies eher aus Neugier als aus irgendeinem praktischen Grund.

Antworten:


12

Was ist der Maximalwert der Prozess-ID? deckt die max; Es gibt reservierte Prozesse ( 0und 1sind bemerkenswert), aber nicht viele, und es gibt ein bisschen Code im Kernel, der die nächste freie Ganzzahl (die meisten Unix) oder stattdessen eine zufällige PID (OpenBSD oder einige Linux-Varianten) auswählt. OpenBSD ruft dies auf, allocpidwas in zu finden istkern/kern_fork.c

/* Find an unused pid */
pid_t
allocpid(void)
{
        static pid_t lastpid;
        pid_t pid;

        if (!randompid) {
                /* only used early on for system processes */
                pid = ++lastpid;
        } else {
                /* Find an unused pid satisfying lastpid < pid <= PID_MAX */
                do {
                        pid = arc4random_uniform(PID_MAX - lastpid) + 1 +
                            lastpid;
                } while (ispidtaken(pid));
        }

        return pid;
}

Wenn die PIDs knapp werden (natürlich unwahrscheinlich), wird diese zufällige Auswahl nicht so gut funktionieren. Der Algorithmus überrascht mich.
Spender

OpenBSD legt standardmäßig sehr niedrige Prozesslimits fest (256 pro Benutzer). Wenn Sie dies nicht ändern login.confoder einen daemonKlassenbenutzer Amok ausführen lassen, wird das Prozesslimit lange vor Ablauf der PIDs erreicht.
Thrig

Es überrascht mich die Logik der beiden Codepfade. Nur der zufällige Pfad ruft ispidtaken () auf. Wenn das System im anderen Fall den maximalen PID-Wert erreicht, wird ein Rollover auf 0 durchgeführt. Gibt allocpid () ihn als verwendbar zurück? mmh
Massimo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.