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.
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.
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.
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 <stdlib.h>
#include <sys/wait.h>
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());
Fonev