Heim Backend-Entwicklung PHP-Tutorial Detaillierte Erläuterung des Beispiels für den Ausführungsprozess von pcntl_fork

Detaillierte Erläuterung des Beispiels für den Ausführungsprozess von pcntl_fork

Mar 08, 2018 pm 02:14 PM
fork pcntl 实例

In diesem Artikel wird hauptsächlich ein Beispiel für den Ausführungsprozess von pcntl_fork vorgestellt. Das Konzept des Prozesses besteht hauptsächlich aus drei Elementen:

1. Ein ausführbares Programm
2. Alle mit dem Prozess verbundenen Daten (einschließlich Variablen, Speicherplatz, Puffer usw.); 3. Der Ausführungskontext des Programms

kann als

betrachtet werden. Es kann einfach verstanden werden, dass ein Prozess einen Ausführungsprozess eines ausführbaren Programms darstellt. ein Staat in. Die Verwaltung von Prozessen durch das Betriebssystem erfolgt typischerweise über die Prozesstabelle. Jeder Eintrag in der Prozesstabelle zeichnet den Status eines Prozesses im aktuellen Betriebssystem auf.

Im Fall einer einzelnen CPU belegt zu einem bestimmten Zeitpunkt nur ein Prozess die CPU, es können jedoch gleichzeitig mehrere aktive Prozesse (die auf die Ausführung oder die fortgesetzte Ausführung warten) im System vorhanden sein. Ein als Programmzähler (PC) bezeichnetes Register gibt die Position des nächsten Befehls an, der von dem Prozess ausgeführt werden soll, der derzeit die CPU belegt. Wenn die einem Prozess zugewiesene CPU-Zeit aufgebraucht ist, speichert das Betriebssystem den Wert des Registers, das sich auf den Prozess bezieht, im entsprechenden Eintrag des Prozesses in der Prozesstabelle, von dem die CPU übernommen wird Dieser Prozess wird aus der Prozesstabelle gelesen und das entsprechende Register aktualisiert (dieser Prozess wird als „
Kontextwechsel (Prozesskontextwechsel)“ bezeichnet). Der eigentliche Kontextwechsel muss mehr Daten umfassen, was nichts damit zu tun hat Keine weiteren Details zu beachten ist, dass das Programmregister angibt, wo das Programm ausgeführt wurde. Der Prozess, der aus der CPU ausgelagert wird, muss diesen Wert speichern Der Prozess, der in die CPU eingelagert wird, muss auch auf der Grundlage der darin gespeicherten Ausführungskontextinformationen dieses Registers aktualisiert werden.

Fock-Wissen

Nach der Verzweigung kopiert das Betriebssystem einen untergeordneten Prozess, der genau dem übergeordneten Prozess entspricht, obwohl es sich aus der Perspektive um eine Vater-Sohn-Beziehung handelt Im Betriebssystem ähneln sie eher einer Brüderbeziehung. Diese beiden Prozesse teilen sich den Coderaum, aber der Datenraum ist unabhängig voneinander. Der Inhalt im Datenraum des untergeordneten Prozesses ist eine vollständige Kopie des übergeordneten Prozesses Der Befehlszeiger ist genau derselbe, es gibt jedoch nur einen Unterschied. Wenn die Verzweigung erfolgreich ist, ist der Inhalt im Datenraum des untergeordneten Prozesses eine vollständige Kopie des übergeordneten Prozesses. Der Rückgabewert von fork im übergeordneten Prozess ist die Prozessnummer des untergeordneten Prozesses. Wenn der Fork fehlschlägt, gibt der übergeordnete Prozess einen Fehler zurück. Man kann sich vorstellen, dass die beiden Prozesse gleichzeitig und im gleichen Tempo ausgeführt wurden. Nach der Verzweigung erledigen sie jeweils unterschiedliche Aufgaben, das heißt, sie teilen sich auf. Deshalb wird die Verzweigung als Verzweigung bezeichnet. Welcher Prozess zuerst ausgeführt wird, hängt mit dem Planungsalgorithmus der Betriebssystemplattform zusammen, und dieses Problem ist in praktischen Anwendungen nicht wichtig. Wenn übergeordnete und untergeordnete Prozesse zusammenarbeiten müssen, kann es durch die Steuerung der Syntaxstruktur gelöst werden.

2

Der untergeordnete Prozess kann die Dinge des übergeordneten Prozesses vor Fork erben, aber nach pcntl_fork() können der untergeordnete Prozess und der Der übergeordnete Prozess hat keine Vererbungsbeziehung. Im untergeordneten Prozess erstellte Dinge gehören zum untergeordneten Prozess, und im übergeordneten Prozess erstellte Dinge gehören zum übergeordneten Prozess. Sie können vollständig als zwei unabhängige Prozesse betrachtet werden.

3

Nachdem pcntl_fork() im Programmsegment verwendet wurde, gab es zwei Prozesse, die abgeleitet wurden Was zuerst ausgeführt wird, hängt vom Planungsalgorithmus des Systems ab.

Hier können wir uns vorstellen, dass das System beim Ausführen von „pid=pcntl_fork();“ einen Unterprozess erzeugt, der genau dem Hauptprogramm entspricht. Die im Satz „pid=pcntl_fork();“ erhaltene PID ist die PID des untergeordneten Prozesses selbst, die im Satz „pid=pcntl_fork();“ erhaltene PID ist die PID des übergeordneten Prozesses selbst. Das Programm verfügt also über zwei Ausgabezeilen.

4

Die Funktion pcntl_fork() kopiert die Leiterplatte des aktuellen Prozesses und gibt die PID des abgeleiteten untergeordneten Prozesses an den übergeordneten Prozess zurück. Die übergeordneten und untergeordneten Prozesse parallel hängen die Reihenfolge der Druckanweisungen vollständig vom Planungsalgorithmus des Systems ab, und der Druckinhalt wird durch die PID-Variable gesteuert. Da wir wissen, dass pcntl_fork() die PID des abgeleiteten untergeordneten Prozesses an den übergeordneten Prozess zurückgibt, was eine positive Ganzzahl ist, und die PID-Variable des abgeleiteten untergeordneten Prozesses nicht geändert wurde, ermöglicht uns dieser Unterschied, ihre unterschiedlichen Ausgaben zu sehen.

5

  1. Der Prozess, der den untergeordneten Prozess ableitet, dh den übergeordneten Prozess, hat dieselbe PID ;

  2. Für den untergeordneten Prozess gibt die Funktion fork() 0 an ihn zurück, aber seine eigene PID wird niemals 0 sein; der Grund, warum die Funktion fork() an ihn 0 zurückgibt, ist weil es jederzeit verwendet werden kann Rufen Sie getpid() auf, um Ihre eigene PID zu erhalten.

  3. Nach der Verzweigung ist es unmöglich zu bestimmen, wer die Synchronisierung zwischen dem übergeordneten und dem untergeordneten Prozess ist Wer zuerst läuft oder wer zuerst endet. Es ist falsch zu glauben, dass der übergeordnete Prozess erst nach Beendigung des untergeordneten Prozesses von fork zurückkehrt. Dies ist bei fork nicht der Fall, sondern bei vfork.

Beispiel

<?php$lock = new swoole_lock(SWOOLE_MUTEX);echo "[主进程]create lock\n";$lock->lock();$res = pcntl_fork();if ($res>0)
{    echo "1\n";    $lock->unlock();
    sleep(1);    echo "222";
} 
else{    echo "[子进程] Wait Lock\n";    $lock->lock();    echo "[子进程] Get Lock\n";    $lock->unlock();    exit("[子进程] exit\n");
}echo "[主进程]release lock\n";unset($lock);echo "[主进程]exit\n";
Nach dem Login kopieren

Detaillierte Erläuterung des Beispiels für den Ausführungsprozess von pcntl_fork

Verwandte Empfehlungen:

Weibo Qzone WeChat pcntl_fork implementiert PHP-Multiprozess,

Detaillierte Einführung in pcntl_fork in PHP-Multiprozess

php Verwendung von pcntl_fork und pcntl_fork

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispiels für den Ausführungsprozess von pcntl_fork. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SVM-Beispiele in Python SVM-Beispiele in Python Jun 11, 2023 pm 08:42 PM

Support Vector Machine (SVM) in Python ist ein leistungsstarker überwachter Lernalgorithmus, der zur Lösung von Klassifizierungs- und Regressionsproblemen verwendet werden kann. SVM eignet sich gut für den Umgang mit hochdimensionalen Daten und nichtlinearen Problemen und wird häufig in den Bereichen Data Mining, Bildklassifizierung, Textklassifizierung, Bioinformatik und anderen Bereichen eingesetzt. In diesem Artikel stellen wir ein Beispiel für die Verwendung von SVM zur Klassifizierung in Python vor. Wir werden das SVM-Modell aus der scikit-learn-Bibliothek verwenden

VUE3-Erste-Schritte-Beispiel: Erstellen eines einfachen Videoplayers VUE3-Erste-Schritte-Beispiel: Erstellen eines einfachen Videoplayers Jun 15, 2023 pm 09:42 PM

Da die neue Generation von Front-End-Frameworks weiter auf dem Vormarsch ist, erfreut sich VUE3 als schnelles, flexibles und benutzerfreundliches Front-End-Framework großer Beliebtheit. Als Nächstes lernen wir die Grundlagen von VUE3 kennen und erstellen einen einfachen Videoplayer. 1. VUE3 installieren Zuerst müssen wir VUE3 lokal installieren. Öffnen Sie das Befehlszeilentool und führen Sie den folgenden Befehl aus: npminstallvue@next Erstellen Sie dann eine neue HTML-Datei und führen Sie VUE3 ein: &lt;!doctypehtml&gt;

Erfahren Sie Best-Practice-Beispiele für die Zeigerkonvertierung in Golang Erfahren Sie Best-Practice-Beispiele für die Zeigerkonvertierung in Golang Feb 24, 2024 pm 03:51 PM

Golang ist eine leistungsstarke und effiziente Programmiersprache, mit der sich verschiedene Anwendungen und Dienste entwickeln lassen. In Golang sind Zeiger ein sehr wichtiges Konzept, das uns helfen kann, Daten flexibler und effizienter zu verwalten. Die Zeigerkonvertierung bezieht sich auf den Prozess der Zeigeroperation zwischen verschiedenen Typen. In diesem Artikel werden anhand konkreter Beispiele die Best Practices der Zeigerkonvertierung in Golang erläutert. 1. Grundkonzepte In Golang hat jede Variable eine Adresse, und die Adresse ist der Speicherort der Variablen im Speicher.

Beispiel für einen VAE-Algorithmus in Python Beispiel für einen VAE-Algorithmus in Python Jun 11, 2023 pm 07:58 PM

VAE ist ein generatives Modell. Der vollständige Name lautet VariationalAutoencoder, was ins Chinesische als Variational Autoencoder übersetzt wird. Es handelt sich um einen unbeaufsichtigten Lernalgorithmus, der zur Generierung neuer Daten wie Bilder, Audio, Text usw. verwendet werden kann. Im Vergleich zu herkömmlichen Autoencodern sind VAEs flexibler und leistungsfähiger und können komplexere und realistischere Daten generieren. Python ist eine der am weitesten verbreiteten Programmiersprachen und eines der wichtigsten Werkzeuge für Deep Learning. In Python gibt es viele hervorragende und tiefe maschinelle Lernmethoden

Die Beziehung zwischen der Anzahl der Oracle-Instanzen und der Datenbankleistung Die Beziehung zwischen der Anzahl der Oracle-Instanzen und der Datenbankleistung Mar 08, 2024 am 09:27 AM

Die Beziehung zwischen der Anzahl der Oracle-Instanzen und der Datenbankleistung Oracle-Datenbank ist eines der bekanntesten relationalen Datenbankverwaltungssysteme in der Branche und wird häufig für die Datenspeicherung und -verwaltung auf Unternehmensebene verwendet. In Oracle-Datenbanken ist die Instanz ein sehr wichtiges Konzept. Instanz bezieht sich auf die laufende Umgebung der Oracle-Datenbank im Speicher. Jede Instanz verfügt über eine unabhängige Speicherstruktur und einen Hintergrundprozess, der zur Verarbeitung von Benutzeranforderungen und zur Verwaltung von Datenbankvorgängen verwendet wird. Die Anzahl der Instanzen hat einen wichtigen Einfluss auf die Leistung und Stabilität der Oracle-Datenbank.

Beispiel für die Entwicklung eines einfachen PHP-Webcrawlers Beispiel für die Entwicklung eines einfachen PHP-Webcrawlers Jun 13, 2023 pm 06:54 PM

Mit der rasanten Entwicklung des Internets sind Daten zu einer der wichtigsten Ressourcen im heutigen Informationszeitalter geworden. Als Technologie zur automatischen Erfassung und Verarbeitung von Netzwerkdaten erregen Webcrawler immer mehr Aufmerksamkeit und Anwendung. In diesem Artikel wird erläutert, wie Sie mit PHP einen einfachen Webcrawler entwickeln und die Funktion zum automatischen Abrufen von Netzwerkdaten realisieren. 1. Überblick über Web Crawler Web Crawler ist eine Technologie, die automatisch Netzwerkressourcen abruft und verarbeitet. Ihr Hauptarbeitsprozess besteht darin, das Browserverhalten zu simulieren, automatisch auf bestimmte URL-Adressen zuzugreifen und alle Informationen zu extrahieren.

Häufige Fehler und Lösungen für Fork-Fehler in PHP PCNTL Häufige Fehler und Lösungen für Fork-Fehler in PHP PCNTL Feb 28, 2024 am 11:06 AM

Häufige Fehler und Lösungen für Fork-Fehler in PHPPCNTL Wenn Sie die PHPPCNTL-Erweiterung für die Prozessverwaltung verwenden, stoßen Sie häufig auf das Problem eines Fork-Fehlers. Fork ist eine Methode zum Erstellen eines untergeordneten Prozesses. In einigen Fällen kann der Fork-Vorgang aufgrund einiger Fehler fehlschlagen. In diesem Artikel werden einige häufige Fork-Fehler und entsprechende Lösungen vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, diese Probleme besser zu verstehen und damit umzugehen. 1. Mögliche Fehlermeldung bei unzureichendem Speicher: Kann

Beispiele für die Verwendung von Verifizierungscodes im Gin-Framework Beispiele für die Verwendung von Verifizierungscodes im Gin-Framework Jun 23, 2023 am 08:10 AM

Mit der Popularität des Internets sind Verifizierungscodes zu einem notwendigen Prozess für die Anmeldung, Registrierung, das Abrufen von Passwörtern und andere Vorgänge geworden. Im Gin-Framework ist die Implementierung der Verifizierungscode-Funktion extrem einfach geworden. In diesem Artikel wird erläutert, wie eine Bibliothek eines Drittanbieters zum Implementieren der Verifizierungscodefunktion im Gin-Framework verwendet wird, und es wird Beispielcode als Referenz für die Leser bereitgestellt. 1. Abhängige Bibliotheken installieren Bevor wir den Bestätigungscode verwenden können, müssen wir die Bibliothek goCaptcha eines Drittanbieters installieren. Um goCaptcha zu installieren, können Sie den goget-Befehl verwenden: $goget-ugithub

See all articles