it-swarm.com.de

Wie viele Prozesse werden mit diesen fork () - Anweisungen erstellt?

Ich glaube, dass dies 24 Prozesse schafft; Ich brauche jedoch eine Bestätigung. Diese Fragen stumpfen mich oft an. Danke für die Hilfe!

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
  pid_t pid = fork();
  pid = fork();
  pid = fork();
  if (pid == 0)
  {
    fork();
  }
  fork();
  return 0;
}
11
Ben Reed

Es ist ziemlich einfach, dies zu begründen. Der Aufruf fork erstellt bei jeder Ausführung einen zusätzlichen Prozess. Der Aufruf gibt 0 im neuen (untergeordneten) Prozess und die Prozess-ID des untergeordneten Objekts (nicht Null) im ursprünglichen (übergeordneten) Prozess zurück.

pid_t pid = fork();  // fork #1
pid = fork();        // fork #2
pid = fork();        // fork #3
if (pid == 0)
{
  fork();            // fork #4
}
fork();              // fork #5
  1. Gabel Nr. 1 erzeugt zusätzliche Prozesse. Sie haben jetzt zwei Prozesse.
  2. Gabel 2 wird von zwei Prozessen ausgeführt, wodurch zwei Prozesse entstehen, insgesamt also vier.
  3. Gabel Nr. 3 wird von vier Prozessen ausgeführt, wodurch vier Prozesse entstehen, also insgesamt acht. Die Hälfte davon hat pid==0 und die Hälfte hat pid != 0
  4. Gabel Nr. 4 wird von der Hälfte der von Gabel Nr. 3 erstellten Prozesse ausgeführt (also vier davon). Dadurch entstehen vier zusätzliche Prozesse. Sie haben jetzt zwölf Prozesse.
  5. Gabel # 5 wird von allen zwölf verbleibenden Prozessen ausgeführt, wodurch zwölf weitere Prozesse erstellt werden. Sie haben jetzt vierundzwanzig.
26
sfstewman

Berechne auf diese Weise:

Beginnen Sie mit 1 (Hauptprozess) und machen Sie es für jede Verzweigung zweimal, wenn sich die Verzweigung nicht im Inneren befindet, wenn (pid == 0) andernfalls der aktuellen Prozessnummer 1/2 des aktuellen Prozesses hinzufügen.

In Ihrem Code: 1PGot # 1 fork (), verdoppeln Sie also die aktuelle Anzahl der Prozesse. Jetzt neue Nummer des Prozesses 2P

# 2 Fork () hat also die aktuelle Anzahl der Prozesse verdoppelt. Jetzt neue Nummer des Prozesses 4P

Hat # 3 Fork (), verdoppelt also die aktuelle Anzahl der Prozesse. Jetzt neue Nummer des Prozesses 8P

Habe # 4 Gabel (), aber warte, wenn es so ist (8 + 4 = 12) P

Bekam # 5 Fork (), verdopple also die aktuelle Anzahl der Prozesse. Jetzt neue Nummer des Prozesses 24P

3
Roshan Mehta

Du hast Recht. Es ist 24. Einfach kompiliert und vor der endgültigen Rückgabeanweisung mit printf ausgeführt. Ich habe 24 Zeilen ausgegeben.

1
willus

Diese Anweisung hat einen untergeordneten Prozess von 24+ . Jeder Aufruf von fork () führt zu zwei Prozessen, dem untergeordneten und dem übergeordneten. Somit führt die erste Gabelung zu zwei Prozessen. Die zweite Gabelung () wird von diesen beiden Prozessen erreicht, was vier Prozesse ergibt. Die letzte Gabelung () wird von diesen vier erreicht und acht weitere Prozesse ausgeführt. Alle bis auf einen dieser Prozesse (das Original) sind ein Kind von mindestens einer der Gabeln.

0
Moeez Mehmood