Child Process ID an Parent weitergeben
-
Hallo,
ich hätte noch eine andere Frage:
Wenn ich einen Parent Process habe der X children erstellt. Wie kann ich ihm mitteilen, welche ID seine Kinder haben?
Z.z. ist z.B. immer der Parent 30421 und die Kinder dann 30422, 30423, 30424 ...
Aber davon auszugehen, dass das immer so läuft, wäre vermutlich ein naiver Anfängerfehler.Wie kann ich dem Parent also die ID's seine Kinder mitteilen?
-
The-Forgotten schrieb:
Wenn ich einen Parent Process habe der X children erstellt. Wie kann ich ihm mitteilen, welche ID seine Kinder haben?
Häh?
-
Wie erzeugst du die Prozesse und unter welchem System? Mit Ansi-C hat das zumindest nichts mehr zu tun. fork() z.B. gibt die ID des Child-Prozesses an den Parent-Prozess zurück.
-
Ich benutzte Fork um mehrere zu erzeugen, nun weiß der prozess der Fork() ausführt aber leider nicht, wie das resultat davon heißt :S
-
Daq ist noch eine wichtige Frage offen.
F schrieb:
.. und unter welchem System?
Und nimmst du
Fork
oderfork
?
-
Ubuntu und fork ... aber ich bin mittlerweile drauf gekommen, nur kann ich das "kill" command nicht ausführen ...
kill (children[n], SIGKILL);
nur warum geht es nicht?
-
Der Compiler jammert etwas von impliziert definierter Funktion ...
Allerings sind
#include <sys/wait.h> #include <sys/types.h>
eingebunden, daher verstehe ich den Fehler nicht ganz
-
Manpage sagt:
#include <sys/types.h>
#include <signal.h>
-
Hi, wirft mir auch mit signal.h noch einen Fehler
... #include <sys/types.h> ... #include <signal.h> ... kill (children[n], SIGKILL);
Wobei children[n] ein int[] ist und n ein int.
-
Wie wärs, wenn du deine Versuche im dafür passenden Forum präsentierst?
-
Ich bin doch im C Forum und in C will ich ja programmieren, was meinst du?
-
Ich meine, dass deine Versuche, POSIX Funktionen zu verwenden, ins Unix Forum gehören, und nichts mit C89/C99 zu tun haben (so heißt dieses Forum).
-
Noch mehr aus der Man:
SYNOPSIS
#include <sys/types.h>
#include <signal.h>int kill(pid_t pid, int sig);
Ein pid_t ist zwar bei mir ein int. Aber ob das auf anderen Systemen die POSIX unterstützen auch so ist, weiß ich nicht.
Ansonsten bin ich noch nicht gescheit genug, nur mit der Fehlermeldung iwas anzufangen. Wenn du also einen kleinen Codeschnippsel herausgeben könntest, der deinen Fehler repräsentiert.
EDIT: Im Linux/Unix Forum fortgeführt http://www.c-plusplus.net/forum/295710
-
Der Code:
... #include <sys/types.h> ... #include <signal.h> ... if (pid != 0){//Bin also im Parent //Warte darauf, dass alle Kinder fertig sind while (pid == waitpid(-1, NULL, 0)) { if (errno == ECHILD) { break; } //Will dann noch die übrig gebliebenen Kinder "killen", damit keine Zombies entstehen while(n != 0) { n--; kill (children[n], SIGKILL); } } }
n enthält die Anzahl der Kinder.
MfG The-Forgotten
-
Und children wird so erstellt: int children[n];