Alle Kinder-PIDs
-
Hallo Community,
ich suche nach einer Möglichkeit unter Linux/Unix die PIDs von allen Kindprozessen eines Prozesses zu bekommen. Am liebsten wäre mir etwas in der Art childrenOf(pid_t pid), das einen Array von Structs zurückliefert, die aus der Kind-PID und dem Befehl, mit dem der Kindprozess gestartet wurde besteht. Sowas wirds wohl nicht in einem Systemcall geben, aber ich hoffe damit klargemacht zu haben, was ich brauche.
Bin für jeden Tipp dankbar!
Der dankbare David.
-
aus herold:
linux/unix systemprogrammierungzur sicherheit nochmal reingeschaut, aber mir schon gedacht:
den aufrufer fork nennt man elterprozess, den durch fork neu kreierten prozess kindprozess....(du weißt, eltern rufen kreieren über fork() kinder)
fork kehr zweimal zurück:
-mit die rückkehr zum kind ist rückgabwert 0
-mit rückkehr zum elternprozess ist rückgabe die prozessid.nun kommt der entscheidende satz:
s.487:
Dies bringt es mit sich, dass es für einen elternprozess keine andere möglichkeit gibt, die prozessids seiner kinder zu erfahren, ausser dem zeitpunkt ihrer kreierung beim fork aufruf. will dagegen ein kindprozess die prozessid seines elterprozesses erfahren, muss er nur die funktion getppid aufrufen.das heisst: merk sie dir selber
(ansonsten gibt es natürlich die unter linux existierenden bash befehle..
ps -A gibt dir die laufenden prozesse, aber das ist nicht das, was du brauchst.. denke ich. du könntest natürlich damit die ganzen kindprozesse holen und die eltern über getppid erfahren)
-- alles ohne gewähr--
-
elise schrieb:
ps -A gibt dir die laufenden prozesse, aber das ist nicht das, was du brauchst.. denke ich. du könntest natürlich damit die ganzen kindprozesse holen und die eltern über getppid erfahren
Das wird denke ich nicht gehen, da getppid immer nur den Parent des eigenen Prozesses liefert.
Unter Linux geht aber /proc/<number>/stat - das 4. Feld ist die PID des Parents.
Siehe proc(5).
-
jep