Mat
20-10-2005, 18:34
Hallo,
ich will folgendes:
mein Vaterprozess soll mehrere Kinder erzeugen und dann warten bis alle fertig sind.
Jedes Kind soll etwas tun (z.B. bis 5 Zählen) und sich danach beenden.
Das Kind das als erstes fertig ist, soll gewinnen.
Wie soll das gehen...
Hier mein erster Ansatz...
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char **argv)
{
pid_t kind;
int i,status;
int anzahlkinder = 5;
for(i=0;i<anzahlkinder;i++)
{
kind=fork();
switch(kind)
{
case -1 : printf("Fehler bei fork()..........\n"); exit(0);
case 0 : printf("Kind : Kind Nr.%d erzeugt mit PID %d\n"
,i+1,getpid());
sleep(15);
printf("Kindprozess (PID:%d) ist fertig!!\n"
,getpid());
exit(i+1);
default : printf("Eltern mit PID %d von Kind mit PID %d\n"
,getpid(),kind);
while(kind=waitpid(kind, &status, WNOHANG)==0)
{
sleep(1);
printf("Eltern mit PID %d fertig\n",getpid());
}
break;
}
}
return 0;
}
ich will folgendes:
mein Vaterprozess soll mehrere Kinder erzeugen und dann warten bis alle fertig sind.
Jedes Kind soll etwas tun (z.B. bis 5 Zählen) und sich danach beenden.
Das Kind das als erstes fertig ist, soll gewinnen.
Wie soll das gehen...
Hier mein erster Ansatz...
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char **argv)
{
pid_t kind;
int i,status;
int anzahlkinder = 5;
for(i=0;i<anzahlkinder;i++)
{
kind=fork();
switch(kind)
{
case -1 : printf("Fehler bei fork()..........\n"); exit(0);
case 0 : printf("Kind : Kind Nr.%d erzeugt mit PID %d\n"
,i+1,getpid());
sleep(15);
printf("Kindprozess (PID:%d) ist fertig!!\n"
,getpid());
exit(i+1);
default : printf("Eltern mit PID %d von Kind mit PID %d\n"
,getpid(),kind);
while(kind=waitpid(kind, &status, WNOHANG)==0)
{
sleep(1);
printf("Eltern mit PID %d fertig\n",getpid());
}
break;
}
}
return 0;
}