PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Den Prozessnamen eines CLI-Scripts ändern

with 2 comments

Wenn man viele Adminscripte auf der Console und Cronjobs in PHP laufen lässt, hat man häufig ein Wirrwarr an Prozessen in seiner Prozessliste (hier die Ausgabe von ‚ps -ef‘):

501 12061 10043   0   0:00.03 ttys001    0:00.06 /usr/local/zend/bin/php proctitle.php

Unschön! Außerdem könnten wir, wenn wir das Script proctitle.php mehrfach starten, die einzelnen Prozesse nicht mehr voneinander unterscheiden. Genauso schlimm ist es wenn man mit pcntl_fork arbeitet und den aktuellen Prozess forkt, so hat man schnell eine Vielzahl an gleich lautenden Prozessen. Doch es gibt einen Ausweg, wir können den Prozesstitel ändern, und zwar mit der Extension proctitle. Sie funktioniert unter Linux und auch auf dem Mac.

EDIT: Seit PHP 5.5. kann der Process-Titel nativ gesetzt werden, ohne eine Extension installieren zu müssen: cli_set_process_title()

Die Installation geht schnell von der Hand:

sudo ./pecl install proctitle-alpha

Danach noch schnell eine Zeile in die php.ini hinzufügen:

extension=proctitle.so

Hier ein kleines Beispielscript, das jede Sekunde den Prozessnamen ändert. Es macht natürlich Sinn, dort interessante Informationen reinzuschreiben, wie die aktuelle Anzahl an Clients, TCP-Verbindungen, Jobs in der Warteschlange, verbundene Benutzer oder oder.

<?php

$i = 0;

while (true) {
    // do some stuff here
    $i++;

    setproctitle('My Super Server ('.$i.' connections)');

    sleep(1);
}

Die Ausgabe des ps-Befehls sieht dann so aus.

501 14146 10043   0   0:00.01 ttys001    0:00.04 My Super Server (6 connections)

und eine Minute später so:

501 14146 10043   0   0:00.02 ttys001    0:00.04 My Super Server (74 connections)

Written by Michael Kliewe

März 18th, 2011 at 8:43 am

Posted in PHP

Tagged with , ,

2 Responses to 'Den Prozessnamen eines CLI-Scripts ändern'

Subscribe to comments with RSS or TrackBack to 'Den Prozessnamen eines CLI-Scripts ändern'.

  1. „Es macht natürlich Sinn, dort interessante Informationen reinzuschreiben, wie die aktuelle Anzahl an Clients, TCP-Verbindungen, Jobs in der Warteschlange, verbundene Benutzer oder oder.“

    Also die interessanteste Information die ich in der Prozessliste erwarte ist eigentlich, welcher Prozess da läuft. Informationen wie o.a. gehören da IMO eher nicht rein und die muß ich mir halt auf anderem Wege holen (Signal-Handler zB).
    Sinnvoller finde ich an der Ext eher, daß man damit die Möglichkeit hat sensible Daten auszublenden, wenn zB ein Passwort an ein php-cli übergeben wird.

    danielj

    18 Mrz 11 at 10:25

  2. @danielj: Die Sache mit dem Passwort ist ein interessanter Punkt. Obwohl man Passworte nicht via Parameter übergeben soll, gibt es doch viele Scripte da draußen, die genau das tun. Wirklich verstecken tut man es damit natürlich nicht, mit den richtigen ps-Parametern bekommt man natürlich auch den original Shell Command wieder raus.

    Die Sache mit den „Anzahl an Clients, TCP-Verbindungen, Jobs in der Warteschlange, verbundene Benutzer“ ist einfach nur eine Vereinfachung, um auf den ersten Blick die Situation einschätzen zu können, dann kann man sich dafür ein Admin-Interface/Netzwerkport/Datei/Signalhandling sparen, über die man sonst solche Informationen abrufen müßte.

    Michael Kliewe

    18 Mrz 11 at 10:40

Leave a Reply

You can add images to your comment by clicking here.