Betrachten Sie dieses einfache Programm zu verstehen:Der Versuch, die Logik der Funktion fork Rückgabewert
using namespace std;
int main(int argc, const char * argv[]) {
cout << "first pid: " << getpid() << endl;
int a = fork();
int b = fork();
cout << a << " " << b << endl;
return 0;
}
Also ich bin mit diesem über und über, und zu versuchen, zu verstehen, was das Muster, das in jedem Durchlauf auftreten wird. Ich verstehe einfach nicht, was in Bezug auf die Zahlen passiert. Ich drucke ursprünglich das Pid vor den Gabeln, und dann sehe ich das Pid nicht mehr, als wäre es verändert oder so. Ich füge 2 verschiedene Ausgänge als Referenz:
first pid: 64538
64541 64542
64541 0
0 64543
0 0
first pid: 64625
64628 64629
0 64630
0 0
64628 0
Was verstehe ich, dass es jetzt vier Prozesse am Leben sind, da die ersten Gabel Ergebnisse mit 2 Prozessen und der zweiten Gabel Gabeln sie in 4 proccesses zusammen. Was ich nicht verstehe, ist die Logik der auf der Konsole gedruckten IDs.
Da Kindprozesse werden sie in zufälliger Reihenfolge nicht synchronisiert drucken. – VTT
IDs werden vom Betriebssystem aufgrund seiner eigenen intrinsischen "Logik" zugewiesen. Eine ID muss (nach Betriebssystem) vergeben werden, um eindeutig zu sein, aber nichts anderes (akzeptieren Sie, dass es einen speziellen No-PID-Wert geben sollte). – Scheff
64541 in der ersten Ausgabe und 64628 in der zweiten erscheinen zwei Mal. PIDs auf einem Unix-System werden üblicherweise in aufsteigender Reihenfolge zugewiesen. –