Auf Child warten das nicht beendet wird ?

N

Nano

Foren As
Hallo zusammen,
nach dem das alte Problem gelöst ist.... ;(

Mein Childprozess sieht folgendermassen aus

Code:
dup2(commpipe[0],0);	//input = output des vaters
close(commpipe[1]);		
if(execl("/bin/sh","sh",NULL) == -1)
{
	fprintf(stderr,"execl Error!");
	exit(1);
}
und wird auch nicht beendet, vom fehlerfall abgesehen.

Mein Problem :
Ich würde im Vater gerne solange warten bis ich vom Kind Daten erhalten habe.

Also Vater sendet beispielswiese ls ans kind und wartet bis er die antwort auf ls hat,..

mein erster gedanke war wait() , das scheint allerdings nur zu funktionieren wenn das kind beendet wird, was hier nicht der fall ist.

die 2te idee wäre irgendwie zu testen ob auf der pipe die für den output zuständig ist ( in diesem fall ganz normaler stdout ) daten gesendet werden,
a) geht das ?
b) ist das der richtige ansatz oder gibt es da eine bessere methode ?

3 theoretische idee, den parent schlafen legen und auf ein signal vom kind warten, keine ahnung ob sowas machbar ist.
 
Zuletzt bearbeitet:
Sicherlich - es gibt doch Usersignale und die Pid des Vaters sollte doch dem
Kind bekannt sein. SIGUSR1 -bis irgendwas gibts doch
 
Sicherlich - es gibt doch Usersignale und die Pid des Vaters sollte doch dem
Kind bekannt sein. SIGUSR1 -bis irgendwas gibts doch

das ist mir bekannt nur um ein signal zu generien brauche ich ja irgend ein event und eben da liegt das problem ich weiss nicht wie ich in dem kind einen datenausgang feststellen kann
 
Dein Beispiel sieht so aus, als ob du nur eine Pipe zum Sohnprozess aufmachst; dann wird das m.E. schwierig ... Ich denke, du müsstest auch stdout und stderr der Shell über Pipes einfangen, damit du so die Ausgaben des Sohnprozesses mitlesen und an das Terminal weiterreichen kannst. Dann kannst du entweder wieder auf die Benutzereingabe (Standardeingabe deines Kontrollprogramms) umschalten, wenn du über den Shell-Output-Kanal einen Prompt (PS1/2/3) bekommst (Achtung: wenn ich mich recht erinnere, kommen die PS-Prompts auf stderr), oder aber - eleganter - du überwachst mit select() gleichzeitig die Ausgaben der Shell und die Eingaben auf der Konsole, und bedienst dann einfach den Kanal, der was liefert.

Grüsse
 
danke flyed, ich hab währenddessen auch select() entdenkt
ich denke auch das es die beste lösung ist nur leider funktioniert sie noch nicht ;(

falls jemnad diesbezüglich ein gutes beispiel hatt wäre ich dankbar, ich habe bis jetzt nur ein beispiel aus der manpage gefunden das sich allerdings nur auf den stdin bezhieht, vielleicht hab ich auch mittlerweile 1-2 pipes im kopf verdreht.. ich setzt mich morgen mal wieder in aller frische daran
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

C: ausgabeumleitung bei exec

C : Prozesskommunikation

Auf eine prozess Warten

Ubuntu X / dbus problem

Zurück
Oben