Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Kindprozesse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.05.2008, 18:23 Uhr
Lucifero



Hallo,
Ich fange gerade an C zu programmieren und habe in folgendem Code wohl einige Fehler gemacht.
Das Programm soll in einer Endlosschleife laufen, der Vaterprozess soll die id des Kindprozesses ausgeben und Zombies wegräumen und auch ausgeben welche ID diese hatten.

Bei dem Programm wird ein Timer gestartet, allerdings nach soll nachdem der Kindprozess fertig ist wieder die Eingabezeile für die Zeitdauer erscheinen.

Außerdem soll nach der Eingabe von Buchstaben abgebrochen und es soll erneut die Eingabezeile aufgerufen werden.

Ob die Zombievernichtung schon funktioniert konnte ich noch nicht ausprobieren.


Code:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>

void Wecker(){
    int dauer;
    printf("Bitte Zeitdauer in Sekunden eingeben> ");
    if(scanf("%d",&dauer)<1){
    printf("Bitte eine positive ganze Zahl eingeben!\n");
    Wecker();
    }
    int status;
    pid_t kind;
    kind = fork();
    switch(kind){
        case -1: perror("kind"); exit(EXIT_FAILURE);
        case 0:    sleep(dauer);
                printf("\nRingRing! von dem Wecker mit ID %d:\n", getpid());
                 exit(EXIT_SUCCESS);
        default:printf("Wecker mit ID %d: gestartet\n", kind);
               while((kind = waitpid(-1,&status,WNOHANG))>0){
                if(kind == -1){
                    printf("\nKindzombie mit ID: %d ist weggeräumt worden\n", kind);
                }
            }
            Wecker();
        }
}



Vielen dank im vorraus :D

Dieser Post wurde am 11.05.2008 um 18:49 Uhr von Lucifero editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.05.2008, 19:53 Uhr
Lucifero



Alternativ habe ich gerade eine zweite Variante ausgetestet, die leider auch nicht so ganz will wie ich, aber viell. ist sie eurer Meinung nach besser geeignet.


Code:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>

void Wecker(){
    int dauer;
    printf("Bitte Zeitdauer in Sekunden eingeben> ");
    if(scanf("%d",&dauer)<1){
    printf("Bitte eine positive ganze Zahl eingeben!\n");
    Wecker();
    }
    int status;
    pid_t kind;
    kind = fork();
    while(1){
    if (kind > 0){
    printf("Wecker mit ID %d: gestartet\n", kind);
             while((kind = waitpid(-1,&status,WNOHANG))>0){
                if(kind == -1){
                    printf("\nKindzombie mit ID: %d ist weggeräumt worden\n", kind);
                }
            }
            Wecker();
    }else if(kind == 0){
        sleep(dauer);
        printf("\nRingRing! von dem Wecker mit ID %d:\n", getpid());
        exit(EXIT_SUCCESS);
    }else{
        perror("kind"); exit(EXIT_FAILURE);
    }
    }
    Wecker();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: