definierten Prozess killen
-
Hallo,
Danke für die Korrekturen, ich habe z.T. nicht zuende gedacht, vorallem nicht bei 5tens ... Danke
Die anderen Punkte werd ich korrigieren!Das mit dem "kill" war wirklich bescheuert *lach*
Danke nochmal für die Hilfe
Gruss Alex
Korrektur:
#include <unistd.h> #include <sys/types.h> int main(void) { int pid; char befehl[255]; switch( pid=fork() ) { case -1: /* Fehler bei fork() */ break; case 0: /* Hier befinden Sie sich im Kindprozess */ int rc=execle("/home/alex/entw/MEINPROGRAMM2","MEINPROGRAMM2",NULL); exit(127); default: /* Hier befinden Sie sich im Elternprozess */ break; printf ("Der PID von Programm 2 ist: %d",pid); //Prozess killen: rc=kill(pid,9); return 0; }
-
Hallo,
ich habe mal zeit gefunden mein Projekt weiter zu coden, aber ich habe das Problem, das
int rc=execle("/home/alex/entw/MEINPROGRAMM2","MEINPROGRAMM2",NULL);
funktioniert ... echt nicht, es kommt nur ein Returncode von -1
hat jemand ein Idee, was das sein könnte, Berechtigungen von MEINPROGRAMM2 sind 777 ... zum testen okay.Hilfe!!!
Gruss Alex
-
du benutzt execle falsch. Was du willst ist glaube ich execl (Bedenke, das execle auch noch einen Parameter für die Environment verlangt!)
Ansonsten solltest du _immer_ auch den Wert von errno angeben (oder am besten mittels perror direkt eine lesbare Fehlermeldung), wenn eine Funktion fehlschlägt. Wenn exec* -1 zurück gibt, kann das so gut wie alles bedeuten!
-
rüdiger schrieb:
du benutzt execle falsch. Was du willst ist glaube ich execl (Bedenke, das execle auch noch einen Parameter für die Environment verlangt!)
Hallo rüdiger, stimmt.
Mitrc=execl("./MEINPROG2","./MEINPROG2",(char *) 0);
Funktioniert es
Danke Gruss Alex
-
Du willst nicht execle sondern execlp benutzen. Oder genauer gesagt:
int rc=execle("/home/alex/entw/MEINPROGRAMM2","MEINPROGRAMM2", (char *) 0);
-
asha schrieb:
Du willst nicht execle sondern execlp benutzen. Oder genauer gesagt:
int rc=execle("/home/alex/entw/MEINPROGRAMM2","MEINPROGRAMM2", (char *) 0);
Natürlich Käse sondern:
int rc=execlp("/home/alex/entw/MEINPROGRAMM2","MEINPROGRAMM2", (char *) 0);
Gruß
-
hallo asha,
danke ...werd es gleich mal checken ...
Gruss Alex
δ
-
ne, execl ist schon richtig. execlp geht ja ähnlich wie die Shell vor und durchsucht die PATH-Variable, aber er gibt ja eh einen absoluten Pfad an.
-
Hallo,
das Programm funktioniert perfekt, aber jedesmal wenn ich das Child kille, habe ich einen Zombie-Prozess, ich weiss, das Ding ist tot und belegt nur eine ProzessID, aber ich empfinde das als unschön
*lach*
Ich habe mal gegoogelt und das gefunden:Nun, der Prozeß moechte seinem Parent noch den Exit-Status übergeben. Damit der Parent auch weiß, welches Kind ihm diesen Status schickt, muß der Prozeß seine Prozessnummer behalten, bis der Parent den Status gelesen hat.
Wenn der Parent aber ein Rabenvater ist und die letzten Worte seines Kinds nicht hören möchte, dann geistert der tote Prozeß als Zombie weiter durch das System, solange bis er den Exit-Status doch noch bei seinem Parent abliefern kann.
Wie kann ich das Realisieren , das mein Programm kein Rabenvater ist und den Exit-Status abfragen kann, das der Kindeszombie weg ist?
Danke für Eure Hilfe
Gruss ALex
-
wait(2) oder waitpid(2)
-
Danke, werd ich gleich mal checken.
Mir ist bloss mein Entwicklungsserver gestorbenDanke für die Hilfe
Gruss ALex