Auf Child warten das nicht beendet wird ?

Dieses Thema im Forum "C/C++" wurde erstellt von Nano, 03.03.2009.

  1. #1 Nano, 03.03.2009
    Zuletzt bearbeitet: 03.03.2009
    Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    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.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 pferdefreund, 03.03.2009
    pferdefreund

    pferdefreund Doppel-As

    Dabei seit:
    26.12.2007
    Beiträge:
    144
    Zustimmungen:
    0
    Sicherlich - es gibt doch Usersignale und die Pid des Vaters sollte doch dem
    Kind bekannt sein. SIGUSR1 -bis irgendwas gibts doch
     
  4. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    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
     
  5. #4 floyd62, 03.03.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    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
     
  6. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    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
     
Thema:

Auf Child warten das nicht beendet wird ?

Die Seite wird geladen...

Auf Child warten das nicht beendet wird ? - Ähnliche Themen

  1. »One Laptop per Child« zeigt erstes XO-Tablet

    »One Laptop per Child« zeigt erstes XO-Tablet: Die One Laptop Per Child Association (OLPCA) hat auf der CES ein Android-Tablet vorgestellt, das mit dem Lernsystem »XO Learning« der OLPCA...
  2. Variable aus Child-Prozess "Re-exportieren"

    Variable aus Child-Prozess "Re-exportieren": Gibts ne Möglichkeit, wie ich eine in einem Child Prozess erstelle Variable zurückbringe in den Mutterprozess? Ich möchte aus einer Schleife...
  3. preg_match() liefert httpd_error: child pid 4736 exit signal Segmentation fault (11)

    preg_match() liefert httpd_error: child pid 4736 exit signal Segmentation fault (11): Hallo, ich habe einen kleinen Parser in PHP5.2.1 unter Apache 2.2.4 geschrieben, der folgendes Muster in einer LaTeX Datei sucht: $line =...
  4. Daten über Pipe am Childprozess in Empfang nehmen

    Daten über Pipe am Childprozess in Empfang nehmen: Hallo, Habe mir gerade eine kurze Einführung nach C++ durchgelesen und gemerkt, dass ich aus Zeitgründen auf das eigenständige Lösen dieses...
  5. Apache error log: Cannot allocate memory: couldn't create child process

    Apache error log: Cannot allocate memory: couldn't create child process: Hallo, ich habe auf meinem Server nen Apache mit suPHP laufen, und sporadisch werden php-Files nicht ausgeführt sondern eine Fehler 500 Meldung...