Heim >Backend-Entwicklung >PHP-Tutorial >Wie führe ich PHP-Befehle asynchron aus, ohne sie zu blockieren?

Wie führe ich PHP-Befehle asynchron aus, ohne sie zu blockieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-09 12:00:25498Durchsuche

How to Run PHP Commands Asynchronously Without Blocking?

So führen Sie PHP-Befehle aus, ohne auf Ergebnisse zu warten

In PHP kann der Befehl exec externe Befehle ausführen, aber standardmäßig wartet PHP bis der Befehl beendet ist, bevor Sie fortfahren. In bestimmten Szenarien ist es jedoch wünschenswert, einen Befehl zu starten und mit anderen Aufgaben fortzufahren, ohne auf die Ergebnisse zu warten.

Lösung:

Die PHP-Dokumentation bietet eine Lösung um Befehle ohne Blockierung auszuführen:

// Redirect stdout and stderr to /dev/null to suppress output
exec('run_baby_run > /dev/null 2>&1 &');

Dieser Befehl:

  1. Führt aus run_baby_run-Befehl.
  2. Leitet die Standardausgabe und den Standardfehler nach /dev/null um und unterdrückt jegliche Ausgabe des Befehls.
  3. Stellt den Befehl in den Hintergrund und erstellt einen separaten Prozess, der unabhängig vom PHP-Skript ausgeführt wird .

Alternative Lösung zum Lösen der Prozess:

Um den Prozess vom Apache-Thread zu trennen und sicherzustellen, dass er auch dann weiterläuft, wenn das PHP-Skript beendet wird, verwenden Sie diesen Befehl:

exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');

Diesen Befehl:

  1. Startet eine Bash-Sitzung.
  2. Führt nohup aus, um zu verhindern, dass der Prozess beendet wird, wenn das aufrufende Skript ausgeführt wird wird beendet.
  3. Setzt eine neue Sitzungs-ID (setsid), um den Prozess vom aktuellen zu trennen.
  4. Unterdrückt die Ausgabe wie zuvor.

Das obige ist der detaillierte Inhalt vonWie führe ich PHP-Befehle asynchron aus, ohne sie zu blockieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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