lab2

1. Cel laboratorium

Celem ćwiczeń było zapoznanie się z podstawami tworzenia i zarządzania procesami.

2. Przebieg laboratorium

* zadanie 3 i 4

#include <stdio.h>

#include <stdlib.h>

#include <sys/wait.h>

//zadanie 3 i 4

main(){

int childpid;

int status=1;

int zakonczono;

printf("startuje proces macierzysty pid %d\n",getpid());

if ((childpid = fork()) == -1){

perror("nie moge forknac");

exit(1);

}else if(childpid == 0){//dziecko

sleep(10);

printf("Proces potomny: %d\n", getpid());

exit(1);

}else{//rodzic

int status=0;

int pid = wait(&status);

printf("Proces rodzica, zamknieto: %d, status: %d\n", pid, WEXITSTATUS(status));

}

exit(0);

}

* zadanie 5

#include <stdio.h>

#include <stdlib.h>

#include <sys/wait.h>

//zadanie 5

main(){

int childpid;

int status=1;

int pid;

printf("startuje proces macierzysty pid %d\n",getpid());

int i;

for(i=0; i<5; i++){

if ((childpid = fork()) == -1){

perror("nie moge forknac");

exit(1);

}else if(childpid == 0){//dziecko

sleep(10);

exit(2);

}

}

for(i=0; i<5; i++){

pid = wait(&status);

printf("zamknieto: %d, status: %d\n", pid, WEXITSTATUS(status));

}

exit(0);

}

* zadanie 6

#include <stdio.h>

#include <stdlib.h>

#include <sys/wait.h>

//zadanie 6

main(){

int childpid;

int status=1;

int pid;

printf("startuje proces macierzysty pid %d\n",getpid());

int i;

for(i=0; i<5; i++){

if ((childpid = fork()) == -1){

perror("nie moge forknac");

exit(1);

}else if(childpid == 0){//dziecko

sleep(4);

continue;

}else{

printf("Proces potomny o pidzie %d z rodzica %d\n",getpid(),getppid());

wait(&status);

break;

}

}

exit(0);

}

*zadanie 7

#include <stdio.h>

#include <stdlib.h>

#include <sys/wait.h>

#include <signal.h>

//zadanie 7

void oblsluga_zakonczenia_dziecka(int nr_sig)

{

printf("Rodzic już się dowiedział o zakończeniu procesu %d\n",wait(NULL));

}

main(){

int childpid;

int status=1;

int pid;

printf("startuje proces macierzysty pid %d\n",getpid());

if ((childpid = fork()) == -1){

perror("nie moge forknac");

exit(1);

}else if(childpid == 0){//dziecko

printf("potomek %d\n", getpid());

sleep(4);

exit(2);

}else{

signal(SIGCHLD,oblsluga_zakonczenia_dziecka);

sleep(6);

}

exit(0);

}

3. Wnioski

Po wykonaniu powyższych zadań poznaliśmy z zasadę działania funkcji fork, wait oraz signal. Najbardziej problematycznym zadaniem było zadanie nr 5 gdzie należało stworzyć 5 gdzie każdy nowy proces tworzył własny proces potomny.


Wyszukiwarka

Podobne podstrony:
I9M1S1 Nawrot Gudanowicz lab2
IWP JP2 Lab2 Struktury
Lab2 OZE id 259328 Nieznany
lrm sprawozdanie kck lab2
LAB 4 Lab2 WprowadzenieMATLAB 2 Nieznany
lab2(v2), Semestr III, Technologie wytwarzania
termo lab2 szczotka
Grudziński Krawiec lab2# 10 2012
Badanie wyplywu cieczy ze zbior sprawozdanie z lab2 id 631079 (2)
lab2 3 3
MES lab2
program lab2 1JP3
lab2 7 id 259265 Nieznany
Instrukcja IEF Algorytmy i struktury danych lab2
lab2 (2)
lab2 pd
lab2
PO lab2, Poptymalizacja
bd lab2 id 81995 Nieznany (2)

więcej podobnych podstron