Der Versuch, die Ausgabe eines benutzerbezogenen Befehls zu parsen, wird in der Regel mit großem Abstand zum fragilsten Teil Ihres Programms. (Vor allem etwas so komplexes wie pstree-Ausgabe.) Die Ausgabe ist für den Menschen gedacht und nicht für den Computerkonsum geeignet. Sie kann zwischen Programmversionen oder je nach Systemgebietsschema (Datum, Sprache, Zeichensatz) oder abhängig von den lokalen Anpassungen des Benutzers wechseln. Pstree nicht parsen.
Unter Linux ist die Hauptmethode zum Aufzählen von Prozessen - die Quelle dieser Informationen - das Auflisten von Unterverzeichnissen von / proc mit nur numerischen Namen. Jedes dieser Verzeichnisse stellt einen Prozess dar und sein Name ist die PID. Das übergeordnete Element kann durch Lesen /proc/<pid>/status
und Suchen des PPid:
Attributs (neben sich Pid:
selbst) ermittelt werden.
Um dies zu tun bequeme, können Sie eine der von einem dritten APIs verwenden libprocps : neue API - procps_proctab_read()
oder alte API - readproc()
, readproctab3()
.
Verwenden Sie einen Dienstmanager, um mehrere Instanzen eines Diensts zu verwalten. Die meisten Linux-Systeme enthalten eines (Systemd genannt). Es verfolgt automatisch, welche Prozesse zu welchem Dienst gehören, so dass Befehle systemctl restart smu@foo
(wie auch die entsprechenden C-APIs) immer die richtigen PIDs auswählen.