Beim Schreiben von Befehlszeilenskripten in PHP möchten wir manchmal Prozesstitel über cli_set_process_title und cli_get_process_title festlegen oder abrufen, um den aktuellen aktuellen Skriptstatus klarer zu identifizieren, insbesondere wenn PS , Top und andere Tools zur Prozessüberwachung verwendet werden. Dies ist sehr praktisch beim Schreiben von CLI -Anwendungen wie Dämonen und Verbrauchern von Aufgabenwarteschlangen.
Viele Entwickler werden jedoch auf das Problem stoßen, eine leere Zeichenfolge zurückzugeben oder false, wenn Sie cli_get_process_title () aufrufen. Es ist offensichtlich, dass cli_set_process_title () bereits angerufen wurde und den Titel erfolgreich festgelegt hat. Warum bekommt er ihn nicht wieder? Das Problem liegt möglicherweise nicht in Ihrem Code, sondern in der Erstellung von PHP.
PHPs cli_set_process_title und cli_get_process_title -Funktionen stammen aus der Procctle -Unterstützung, was eine optionale Funktion ist, die PHP zum Zeitpunkt der Kompilierung kompilieren kann. Wenn Ihr PHP nicht aktiviert wird -CLI- und -Enable-Proctile ist während des Erstellungsprozesses nicht aktiviert, dann sind diese Funktionen nutzlos.
Sie können sich mit dem folgenden Befehl erkundigen:
php -i | grep "Process title"
Wenn keine relevante Ausgabe vorliegt oder die folgende Zeile fehlt:
Process title support => enabled
Das bedeutet, dass diese Funktion in Ihrer PHP -Umgebung nicht aktiviert ist.
Hier ist ein Beispiel für das Einrichten und Versuch, den Prozesstitel zu erhalten:
<?php
cli_set_process_title("my_worker_task");
$title = cli_get_process_title();
if ($title === false || $title === "") {
echo "Prozesstitel kann nicht erhalten,Bitte überprüfen PHP Ob es aktiviert ist proctitle Unterstützung。\n";
} else {
echo "Der aktuelle Prozesstitel ist: " . $title . "\n";
}
Wenn Ihr PHP keine relevante Unterstützung aktiviert, können Sie nach der Ausführung nur Warnungen oder leere Ausgaben sehen.
Sie müssen bei der Kompilierung von PHP addieren und standardmäßig aktiviert (normalerweise aktiviert) und -Anable -Proctile -Optionen. Zum Beispiel:
./configure --enable-cli --enable-proctitle
make && make install
Dies ermöglicht den Prozess der Prozesstitelunterstützung und danach können Sie diese beiden Funktionen normal verwenden.
Wenn Sie PHP nicht neu kompilieren können, können Sie den Prozesstitel manuell über exec () oder auf den Aufruf von Systembefehlen einstellen, z. B.:
<?php
$title = "my_custom_task";
exec("exec -a $title php your_script.php");
Es ist jedoch zu beachten, dass diese Methode nicht elegant genug ist und möglicherweise auch unzuverlässig ist, da exec () deaktiviert ist oder verschiedene Systeme unterschiedlich verhalten.
cli_get_process_title () kann den Prozesstitel nicht erhalten, was wahrscheinlich kein Problem mit dem Code ist, aber PHP aktiviert relevante Funktionen. Wenn Entwickler auf solche Probleme stoßen, sollten sie die Build -Parameter der aktuellen PHP -Umgebung so bald wie möglich überprüfen. Insbesondere bei Verwendung von Docker oder einigen Betriebssystemen mit PHP -Versionen sollten Sie auf dieses Detail achten.