lab 2 programy.docx

(275 KB) Pobierz

Uniwersytet Technologiczno-Przyrodniczy
im. Jana i Jędrzeja Śniadeckich w Bydgoszczy

Wydział Telekomunikacji i elektrotechniki

 

Podstawy systemów operacyjnych

 

Lab 2

Grupa 3

Temat:

Procesy – tworzenie i wykonanie

 

 

1.

#include <stdio.h>

#include <unistd.h>

main(){

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

printf("Rodzic procesu ID is: %d\n", getpid());

sleep(60);

printf("obudzilem sie.\n");

}

 

 

             

Każde kolejne uruchomienie programu powoduje zwiększenie unikalnej wartości PID (proces ID), jego rodzic pozostaje ten sam.

2.

#include <stdio.h>

#include <unistd.h>

main(){

fork();

fork();

printf("Proces ID is: %d: ", getpid());

printf("parent process ID is %d,  %d\n", getppid());

}

 

 

 

 

 

 

             

 

fork() rozdziela proces na rodzica i dziecko, każde wywołanie fork spowoduje wypisanie dwóch wartości Proces ID.

 

3.

#include <stdio.h>

#include <unistd.h>

main(){

int i, j, pid, k, x;

i=0;

j=0;

pid = fork();

if (pid == 0){

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

                 for (k=0; k < 10000; k++);

 

                 printf("child: %d\n", i);

                             }

 

             return(0);

}

else {

         for (j=0; j<20; j++){

                 for (x=0; x < 10000; x++);

 

                     printf("Parent: %d\n", j);

                             }

     }

}

 

 

 

 

 

 

 

 

 

 

 

 

4.

#include <stdio.h>

main(){

         int i=0, j=0,pid,k,x;

         pid=fork();

 

         if (pid==0){

 

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

                                 for(k = 0; k < 1000; k++)

                                 printf("Child: %d\n",i);

                                 }

                         printf("**** Zakonczenie dziecka **** \n");

                         }

         else{

                 wait(0);

                 printf("**** Wznowienie rodzica **** \n");

                 for(j = 0;j < 2; j++){

                                 for(x = 0; x < 1000; x++)

           printf("Parent: %d\n",j);

                                 }

         }

 

}

 

Funkcja wait() jest funkcją blokującą, która wstrzymuje proces wywołujący ją aż do zakończenia działania któregoś z procesów potomnych. Jeżeli nie zastosujemy funkcji wait dziecko i rodzic będą wykonywane zgodnie z działaniem programu, zastosowanie tej funkcji zablokuje rodzica aż do momentu wykonania działania przez proces potomny (dziecko).

5.

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <sys/wait.h>

main(){

    int result, waitedfor, statvar;

   printf("%d: jestem rodzicem. \n", getpid());

     printf("%d: przechodze przez fork ... \n", getpid());

result = fork();

if(result != 0){

  /*rodzic wykonuje ten kod*/

printf("%d: PID mojego dziecka %d\n", getpid(), result);

}

else{ /*forkresult == 0*/

  /*dziecko wykonuje ten kod*/

printf("%d: czesc, jestem dzieckiem.\n", getpid());

printf("%d: przechodze do wykonania ls\n\n", getpid());

execlp("ls", "ls", NULL);

printf("%d: moj exec sie nie udal\n", getpid());

exit(1);

}

waitedfor = wait(&statvar);

printf("\n\n%d: czekam na proces %d\n", getpid(), waitedfor);

if(waitedfor == result)

printf("%d: tak, jest moj proces \n", getpid());

else

printf("%d: huh, to nie moje dziecko \n", getpid());

printf("%d: jaki ojciec taki syn \n", getpid());

}

Zgłoś jeśli naruszono regulamin