English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Methode zur Implementierung von Prozesssperren und Mehrprozessoren in PHP

Warum ist ein Prozessschloss erforderlich?

Der Hauptzweck ist es, die Wiederholung der Ausführung desselben Programms zu verhindern und wird hauptsächlich in crontab verwendet. Wenn Sie einen zeitraumgesteuerten Job einrichten und dieser jede Minute einmal ausgeführt wird, wird ein neuer Prozess erzeugt, wenn der vorherige Prozess noch nicht abgeschlossen ist. Mit dem Prozessschloss wird überprüft, ob das Prozessschloss bereits existiert, bevor der zeitraumgesteuerte Job ausgeführt wird. Existiert es, wird nicht ausgeführt.

1.Single-Process-Implementation des Prozessschlosses

Nehmen wir als Beispiel, schreiben Sie ein php-Skript, benennen Sie es zunächst einmal process.php. Der Code sieht wie folgt aus: }}

<?php
$lock_file = dirname(__FILE__) . "/process.lock";
$lock_file_handle = fopen($lock_file, 'w');
if ($lock_file_handle === false)
 die("Kann Lockdatei {$lock_file} nicht erstellen\n");
if (!flock($lock_file_handle, LOCK_EX + LOCK_NB)) {
 die(date("Y-m-d H:i:s) . " Process already exists.\n");
}
while(1{
}

Dann führen Sie diesen Code unter Linux-Umgebung aus, das erste Mal wird er ordnungsgemäß ausgeführt, dann wird beim zweiten Mal die Meldung "Process already exists." angezeigt. Nachdem dies passiert ist, wird die Meldung "Process already exists." immer angezeigt, was bedeutet, dass der Prozess fehlgeschlagen ist.

php process.php & //& Symbol bedeutet PHP im Hintergrund auszuführen


Dieser Code kann ebenfalls in Skripten mit geplanten Zeitintervallen verwendet werden, fügen Sie am Anfang hinzu. Dies entspricht der Einrichtung einer Prozesssperre für einen einzelnen Skript.

2. Realisierung mehrerer Prozesse durch Prozesssperre

Das bedeutet, dass eine Sperre einem php-Skript entspricht, um mehrere Prozesse mit Prozesssperren zu realisieren, wäre es nur notwendig, dass ein Prozess mehrere Prozesssperren hat.
Durch eine geringfügige Änderung des Namensbestands Teils der obigen Code-Prozesssperre kann erreicht werden, der Name der Prozesssperre wird nach den übergebenen Parametern entschieden, wenn die übergebenen Parameter übereinstimmen, dann entspricht derselbe Sperre.

if(!($argc > 1))
{
 $lock_file = dirname(__FILE__) . "/process.lock";
}else{
 unset($argv[0]);
 $lock_file = dirname(__FILE__) . "/process". implode('.', $argv) .".lock";
}
$lock_file_handle = fopen($lock_file, 'w');
if ($lock_file_handle === false){
 die("Kann Lockdatei $lock_file nicht erstellen\n");
}
if (!flock($lock_file_handle, LOCK_EX + LOCK_NB)) {
 die(date("Y-m-d H:i:s) . " Process already exists.\n");
}
while(1{
}

Unter Linux-Umgebung. Gehen Sie in das Verzeichnis der Datei und führen Sie php process.php aus 1, öffnen Sie dann ein neues Fenster und führen Sie php process.php aus 1erscheint der Fehler "Process already exists", aber wenn Sie php process.php ausführen 2Funktioniert alles ordnungsgemäß, können Sie auch zwei Parameter übergeben, z.B. php process.php 1 2, was wiederum eine neue Prozesssperre bedeutet. Diese Implementierung verwendet hauptsächlich die beiden PHP-Standardparameter argc und argv, wobei argc die Anzahl der Parameter angibt und argv die spezifischen Parameter bei der Ausführung angibt.

3.Prozesssperre in yii2durchgeführte Implementierung

In yii2Um eine Prozesssperre für mehrere Prozesse in yii zu implementieren, müssen Sie den Controller aus yii\console\Controller; erben, um Parameter zu übermitteln.
Dann geben Sie im crontab den folgenden Befehl ein, um Skripte mit den Befehlen von yii auszuführen. Der Code für die Prozesssperre ist wie oben beschrieben.

* * * * * root /usr/local/bin/php /data/www/html/newVanish/yii-Kontrollernamen/Methode - übermittelte Parameter > /dev/null 2>&1

4.Befehl zum Beenden des Prozesses

Das ist wirklich ein Geheimtipp, den ich nicht jedem mitteile.
Mit einem einzigen Befehl kann der entsprechende Prozess gelöscht werden. Der folgende Befehl löscht alle Prozesse mit dem Namen process_name. Um einen Prozess zu löschen, ändern Sie einfach process_name in den Namen des Prozess, den Sie löschen möchten.

ps aux|grep process_name |grep -v grep|awk '{print $2}'|xargs kill -9

Zusammenfassung

Das ist alles, was es über Prozesssperren und die Implementierung mehrerer Prozesse in PHP gibt. Ich hoffe, dass dieser Artikel Ihnen bei Ihrem Lernen oder der Verwendung von PHP hilft. Wenn Sie Fragen haben, können Sie gerne Kommentare hinterlassen. Vielen Dank für Ihre Unterstützung der Anleitung zum Schreien.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet entnommen und gehört dem jeweiligen Urheber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie Inhalte finden, die möglicherweise urheberrechtlich geschützt sind, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3codebox.com (Bitte ersetzen Sie # durch @, wenn Sie eine Meldung senden, und fügen Sie relevante Beweise bei. Sobald nachgewiesen wird, dass die Inhalte urheberrechtlich geschützt sind, wird diese Website die fraglichen Inhalte sofort löschen.)

Gefällt mir