Добавил:
Fragga
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:лабораторки по ОС препод Челноков / 2семестр / wi1 / Esin / lab1
.c#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/user.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int pid1,pid2,pid3,dead1,dead2,dead3,status1,status2,status3;
switch(fork())
{
case -1:
printf("error \n");
case 0:
pid1=getpid();
printf("begin grandfather,his pid is %d\n",pid1);
switch(fork())
{
case -1:
printf("error \n");
case 0:
pid2=getpid();
printf("begin father,his pid is %d\n",pid2);
switch(fork())
{
case -1:
printf("error \n");
case 0:
pid3=getpid();
printf("begin son,his pid is %d\n",pid3);
printf("press any key \n");
while(!getchar())
{
sleep(1);
}
exit(3);
default:
dead3=wait(&status3);
}
printf("son is dead, pid of dead son is %d\n",dead3);
printf("his status is %d\n",status3>>8);
exit(2);
default:
dead2=wait(&status2);
}
printf("father is dead, pid of dead father is %d\n",dead2);
printf("his status is %d\n",status2>>8);
exit(1);
default:
dead1=wait(&status1);
}
printf("grandfather is dead, pid of dead grandfather is %d\n",dead1);
printf("his status is %d\n",status1>>8);
return 0;
}