Signatur
Beschreibung
swoole_set_process_name() erlaubt es, den Titel des laufenden PHP-Prozesses zu ändern. Dies ist besonders nützlich in Swoole-basierten Server-Anwendungen, wo mehrere Worker-, Manager- und Master-Prozesse gleichzeitig laufen: Durch sprechende Namen lassen sich die Prozesse in der Prozessliste (ps aux, top, htop) sofort identifizieren und gezielt überwachen oder beenden.
Die Funktion wirkt sich direkt auf das Betriebssystem aus und ist nicht auf die PHP-Variable $argv[0] beschränkt. Sie ist damit mächtiger als das manuelle Ändern von $argv[0] und funktioniert unter Linux zuverlässig. Unter macOS gibt es Einschränkungen, da das Betriebssystem die Länge des Prozessnamens auf die ursprüngliche Länge von $argv[0] begrenzt.
Typischerweise wird swoole_set_process_name() in den Swoole-Event-Callbacks aufgerufen, z. B. in onStart, onManagerStart und onWorkerStart, um Master-, Manager- und Worker-Prozesse voneinander zu unterscheiden. Die Funktion ist eine praktische Alternative zu cli_set_process_title(), die seit PHP 5.5 im Core verfügbar ist.
Wichtig: Die Funktion ist Teil der Swoole-Extension und steht nur zur Verfügung, wenn Swoole installiert und geladen ist. Sie hat keinen Effekt, wenn sie in einem nicht-CLI-Kontext oder auf einem nicht unterstützten Betriebssystem aufgerufen wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name Pflicht | string | Der neue Prozessname, der in der Systemliste angezeigt werden soll. Auf Linux ist die Länge auf 15 Zeichen begrenzt (Kernel-Beschränkung für prctl(PR_SET_NAME)). Längere Namen werden stillschweigend abgeschnitten. |
Rückgabewert
Beispiele
Prozessnamen im Swoole-HTTP-Server setzen
<?php
$server = new Swoole\HTTP\Server('0.0.0.0', 9501);
$server->on('Start', function (Swoole\HTTP\Server $server) {
swoole_set_process_name('swoole-master');
echo "Master-Prozess gestartet (PID: {$server->master_pid})\n";
});
$server->on('ManagerStart', function (Swoole\HTTP\Server $server) {
swoole_set_process_name('swoole-manager');
echo "Manager-Prozess gestartet (PID: {$server->manager_pid})\n";
});
$server->on('WorkerStart', function (Swoole\HTTP\Server $server, int $workerId) {
swoole_set_process_name('swoole-worker-' . $workerId);
echo "Worker #{$workerId} gestartet\n";
});
$server->on('Request', function (
Swoole\HTTP\Request $request,
Swoole\HTTP\Response $response
) {
$response->end('<h1>Hallo von Swoole!</h1>');
});
$server->start();
Prozessnamen in einem Swoole-Worker-Prozess setzen
<?php
// Standalone-Prozess mit Swoole\Process
$process = new Swoole\Process(function (Swoole\Process $worker) {
swoole_set_process_name('swoole-custom-worker');
echo 'Prozessname gesetzt. Überprüfung via ps aux...' . PHP_EOL;
// Simuliere Arbeit
sleep(30);
});
$pid = $process->start();
echo "Worker gestartet mit PID: {$pid}" . PHP_EOL;
Swoole\Process::wait();
// Wichtig · Fallstricke
Betriebssystem-Einschränkungen: Unter Linux wird der Prozessname auf maximal 15 Zeichen (ohne Null-Terminator) begrenzt, da prctl(PR_SET_NAME) entsprechend beschränkt ist. Unter macOS ist der Name auf die ursprüngliche Byte-Länge von $argv[0] beschränkt – längere Namen werden abgeschnitten.
Alternative: Ab PHP 5.5 steht im Core die Funktion cli_set_process_title() zur Verfügung, die denselben Zweck erfüllt, jedoch keine Swoole-Extension benötigt. Für neue Projekte ohne Swoole-Abhängigkeit wird cli_set_process_title() bevorzugt.
Verfügbarkeit: Die Funktion ist nur verfügbar, wenn die Swoole-Extension geladen ist. Ein Aufruf ohne Swoole führt zu einem fatalen Fehler. Prüfe mit function_exists('swoole_set_process_name'), ob sie verfügbar ist.