Bleibt eine Prozess-PID garantiert gleich, solange der Prozess nicht abbricht?

8

Ich mache einige Simulationsarbeiten mit Linux, und der Code, an dem ich gerade arbeite, funktioniert nur unter der Annahme, dass, sobald einem Prozess vom Kernel eine PID zugewiesen wurde, diese PID dieselbe bleibt, bis der Prozess beendet wird . Ich würde annehmen, dass dies wahr ist, aber da ich ein bisschen neu in der Linux-Welt bin, möchte ich nur sehen, ob es besondere Umstände gibt, die ich beachten sollte. Vielen Dank!

Reiik
quelle

Antworten:

10

Ja, das ist garantiert. Der Prozess hat dieselbe PID, auch wenn sein Image durch einen Systemaufruf exec durch ein anderes ersetzt wird .

xaizek
quelle
Nun, ein böswilliger Programmierer kann die Garantie brechen, aber dies gilt im Allgemeinen für gut erzogene Programme.
dmckee --- Ex-Moderator Kätzchen
1
Ich kann Ihnen nicht zustimmen, da forkein neuer Prozess mit demselben Image erstellt wird, hat dieser neue Prozess natürlich einen anderen PID-Wert. Im Falle Ihrer Antwort würde ich sagen, dass das Programm seine PID ändert (indem es seinen Prozess ändert), aber nicht den Prozess (und die Frage bezieht sich auf Prozesse).
Xaizek
Das ist natürlich genau richtig, aber das spiegelt einfach die Definition von "Prozess" wider, die das Betriebssystem verwendet. Der Benutzer sieht eine Kontinuität des Zustands mit einer sich ändernden Nummer, und wenn er auf das Vorhandensein / Fehlen der PID zählen würde, um festzustellen, ob ein Zustand auf den Maschinen vorhanden ist, wäre dies ein Problem. Deshalb habe ich das Verhalten als bösartig bezeichnet.
dmckee --- Ex-Moderator Kätzchen
Haben Sie eine Quelle für die Behauptung, dass sich die PID nicht ändert?
Martin Thoma
@MartinThoma, alle Man-Anmeldeinformationen über PID besagen, dass sie bei der Prozesserstellung zugewiesen und übergreifend beibehalten werden execve(). Da die PID nur bei der Prozesserstellung zugewiesen wird, folgt die Persistenz der PID.
Xaizek
11

Na ja ... meistens .

Wie andere Poster bereits sagten , behält ein bestimmter Prozess seine PID auf unbestimmte Zeit bei. Auch durch eine oder mehrere Instanzen von exec.

Ein Programmierer, der sich dieser Garantie auf einer Unix-Box entziehen wollte, hätte jedoch überhaupt keine Probleme. Er würde einfach forkHUP-Signale in der Tochter ignorieren und dann den Mutterprozess beenden. Das Ergebnis wäre, dass die Tochter mit einer neuen PID weitermacht und den Eindruck erweckt, dass der Prozess die PID geändert hat.

dmckee --- Ex-Moderator Kätzchen
quelle
Nur zur Klarstellung: Wenn ich den Prozess schreibe und nicht möchte, dass sich die PID ändert, ändert sich nichts. Grundsätzlich besteht keine Chance, dass ich versehentlich etwas mache, das die PID ändert.
Martin Thoma
Haben Sie eine Quelle für die Behauptung, dass sich die PID nicht ändert?
Martin Thoma
3

PID unter Linux und Windows sind für diesen Prozess einzigartig. PIDs werden sich nie ändern.

Keltari
quelle
Haben Sie eine Quelle für die Behauptung, dass sich die PID nicht ändert?
Martin Thoma