Codierung mit fork und exec am Beispiel in c

Coding With Fork Exec Example C

Der Titel unseres Artikels enthält zwei verschiedene Funktionen der Sprache C, die beim Ausführen eines beliebigen Programms in unserem System auftreten. Leider gibt es in C keine Möglichkeit, mehr als ein Programm gleichzeitig auszuführen. Es kann nur eine einzige Aufgabe zu einem bestimmten Zeitpunkt ausgeführt werden, was bedeutet, dass gleichzeitige Programme nicht ausgeführt werden können. Es führt dazu, dass Sie auf den Abschluss eines Prozesses warten, um den anderen auszuführen. Um dieses Problem bei der Fehlerbehebung zu vermeiden, müssen Sie Ihr Programm möglicherweise gut entwickeln, da Sie ein guter Entwickler sind. Linux fork() wird verwendet, um das Warten zu überwinden und Parallelität in Ihrem System zu ermöglichen. Es hilft beim Duplizieren eines neuen Prozesses und erstellt einen neuen, indem er den duplizierten Prozess aufruft. Der neue Prozess ist der untergeordnete Prozess und der vorherige wird als übergeordneter Prozess bezeichnet.

Während die Funktion exec() verwendet wird, um das aktuell vorhandene Programm durch das neue zu ändern. Diese Ersetzung erfolgt durch Änderungen des Inhalts eines Programms oder einer Datei. Der Unterschied zwischen fork und exec besteht also darin, dass fork einen neuen Prozess aus dem vorhandenen Prozess erstellt und exec verwendet wird, um das vorhandene Programm durch das Erstellen eines neuen zu ersetzen.



Voraussetzungen

Um ein c-Programm auf Ihrem Linux-System auszuführen, müssen wir einige Voraussetzungen darauf installieren. Gehen Sie zum Terminal, indem Sie die Tastenkombination Strg+Alt+T verwenden. Schreiben Sie nun die folgenden Befehle, um die Manpages zu installieren.



$sudogeeignetInstallierenmanpages-dev



Es werden alle entsprechenden Seiten installiert.

Um ein Programm unter Linux auszuführen, müssen Sie einen Code-Compiler installieren. Das wird verwendet, um den Code zu kompilieren und auszuführen. Zu diesem Zweck werden wir GCC-Repositorys in unserem System installieren.

$sudogeeignetInstallierenGCC



Codierung mit exec in c

Da wir die Manpages in Linux installiert haben, verwenden wir den folgenden Befehl, um die Beschreibung zu exec anzuzeigen. Die primäre Beispielsyntax lautet wie folgt:

Syntax

Ausführen(Pfadname/Datei, argv);

Hier haben wir den unistd.h-Header verwendet, da er alle Informationen zu den Familien der exec-Funktion enthält.

$Mann ausführender

Im oben zitierten Bild können Sie nun die Typen von exec. Dies ist die Familie der Exec-Funktionen. Jeder ist für eine andere Funktion, die der gleichen Basis folgt, exec.

Beispiel: Im weiteren Verlauf beschreiben wir die Funktionalität von exec anhand eines Beispiels. Wir nehmen eine Funktion von exec, um ihre Funktionsweise zu demonstrieren, nämlich execv. Zuerst erstellen wir zwei Dateien mit der Erweiterung .c. Nach ihrer Erstellung schreiben wir entsprechende Codes in sie und führen sie aus, um das Ergebnis zu sehen.

Betrachten Sie einen Dateinamen sample4.c. Bitte öffnen Sie es und verwenden Sie den folgenden Code. In diesem Code haben wir execv in einer bestimmten unten angegebenen Weise verwendet.

Führungskraft(./sample4copy , args);

Der erste Teil enthält den neuen Verzeichnispfad und der zweite Teil zeigt das Array arguments als übergebenen Parameter.

Probe4.c

Als erstes haben wir die ID des aktuellen Prozesses gedruckt. Zweitens haben wir ein Zeichenarray mit NULL am Ende für die Beendigung erstellt. Drittens haben wir die Funktion sample4copy aufgerufen.

Sample4copy.c

Beim Aufruf der exec-Funktion() wird das Prozessabbild verändert. Das unten zitierte Bild unten zeigt den Code von sample4copy.c.

Hier haben wir nur print-Anweisungen verwendet, um die ID des aktuellen Prozesses zu erhalten.

Die Ausgabe der jeweiligen Codes kann mit den folgenden Befehlen erreicht werden.

$ GCC–o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$./Probe4

Wie bereits beschrieben, wird das GCC-Wort verwendet, um den Code zu kompilieren, und nach dem Kompilieren wird der Code erfolgreich ausgeführt.

Laut Bild wird zuerst die PID der Datei sample4.c angezeigt, wie sie vor dem exec-Aufruf deklariert wurde. Nachdem die Funktion exec() aufgerufen wurde, werden beide print-Anweisungen der Datei sample4copy.c ausgeführt, wobei getpid() verwendet wird, um die ID des Prozesses zu erhalten.

Codieren mit einer Gabel in c

Die Funktion fork() erstellt den Kindprozess aus dem Elternprozess. Es enthält auch zwei Header, einschließlich der darin enthaltenen Fork-Informationen.

Syntax:

Pid_t Gabel(Leere);

Wir können die Manpage verwenden, um Hilfe bei der Verwendung zu erhalten

$MannGabel

Beispiel: Betrachten Sie nun ein Beispiel, indem Sie eine Datei sample3.c erstellen. Wir werden den Code in die Datei eingeben. Laut Code haben wir den Fork-Status auf forkrank gesetzt.

Probe3.c

Wir haben die if-else-Anweisung verwendet, um die Bedingung anzuwenden. Hier werden einfache Druckbefehle deklariert, um das Verständnis des fork()-Konzepts zu erleichtern. Forkrank wird zuerst als 0 und dann als -1 deklariert. Mit einem fork() gibt es jetzt zwei Prozesse, die gleichzeitig arbeiten. Die Ausgabe kann mit dem gleichen Code wie oben im exec-Beispiel erhalten werden.

$ GCC –o sample3.c
$./Probe3

Die Ausgabe zeigt, dass der Kindprozess früher als der Elternprozess ausgeführt wurde, als der Elternprozess wartete. Die Wartefunktion impliziert, dass sie bewirkt, dass die Elternfunktion wartet, bis einer von allen Kindprozessen beendet wird.

Fork- und Exec-Systemaufrufe gemeinsam

Hier nehmen wir zwei Dateien namens sample1.c und sample2.c. Öffnen Sie zunächst die Datei sampl1.c und schreiben Sie den Code, der unten im Bild angehängt ist. Wir haben hier den Systemaufruf fork() verwendet; wenn der Kindprozess erstellt wird, wird p mit 0 belegt. Bei der Verwendung von exec system-call wird sample1.c durch sample2.c ersetzt.

Probe1.c

Probe2.c

Ähnlich wie in den oben besprochenen Beispielen enthält die Datei sample2 die printf-Anweisungen. In sample1.c wird zuerst der erste Druckbefehl ausgeführt, dann wird die fork-Funktion aufgerufen, wenn p== 0, dann wird der untergeordnete Teil ausgeführt und die Datei sample2.c wird ausgeführt. Die Ausgabe enthält GCC, um beide Dateien zu kompilieren. Hier unterscheiden sich die ID von Parent sample1.c und sample2.c, da sie Eltern und Kinder sind.

Abschluss

In diesem Artikel haben wir sowohl fork als auch exec separat und gemeinsam verwendet, um die Verwendung und das Konzept leicht zu verstehen. Ich hoffe, dass dieses Tutorial genügend Inhalt enthält, der zu einem Zugang bei der Eskalation Ihres Wissens führt.