procesy macierzyste

0

Zadaniem było wstawić funkcje sleep, tak aby procesy pojawiały się na ekranie grupowane pokoleniami od najstarszego do najmłodszego.

Wstawiłem funkcję sleep ale nie wiem czy dobrze i za bardzo nie wiem po czym to rozpoznać czy są dobrze czy źle. Byłbym wdzięczny gdyby mi to ktoś wytłumaczył. Po czym poznać najstarszy proces a po czym najmłodszy.

 void procesy(){
printf(" UID = %i\n GID = %i\n PID = %i\n PPID = %i\n PGRP = %i\n\n", getuid(), getgid(), getpid(),getppid(),getpgrp() ) ;
 
}
 
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
#include"procesy.h" /*mini biblioteka*/
 
 
 
void procesy();
 
int main(){
int i=0;
procesy(); /*proces matka*/
do {   
        switch( fork() ) {
                case -1 : /*obsluga bledow*/
                        perror("Blad funkcji fork//brak potomka") ;
                        exit(EXIT_FAILURE) ;
                        break;
                case 0 : 
                        procesy();
                        sleep(2);
                        break ;
                default :
                        sleep(2);
                        break ;
        }      
                i++ ;
        }while(i < 3) ;
 
return 0;
}

Z góry dziękuję za pomoc :)

0
 

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>

void procesy(){
printf("PID = %i PPID = %i\n",getpid(),getppid()) ;
} 


int main(){
int i=0;
procesy(); /*proces matka*/
	do {   
	printf("i = %d\n",i);
        switch( fork() ) {
                case -1 : /*obsluga bledow*/
                        perror("Blad funkcji fork//brak potomka") ;
                        exit(EXIT_FAILURE) ;
                        break;
                case 0 : 
                        procesy();
                        //sleep(2);
                        break ;
                default :
                        sleep(2);
			printf("Mam pid = %i i poczekalem 2 sek\n",getpid());
                        break ;
        }      
                i++ ;
        }while(i < 3) ;
 
return 0;
}

Przykladowy wynik:

PID = 4564 PPID = 4337
i = 0
PID = 4565 PPID = 4564
i = 1
PID = 4566 PPID = 4565
i = 2
PID = 4567 PPID = 4566
Mam pid = 4564 i poczekalem 2 sek
i = 1
PID = 4568 PPID = 4564
i = 2
Mam pid = 4565 i poczekalem 2 sek
i = 2
PID = 4570 PPID = 4565
PID = 4569 PPID = 4568
Mam pid = 4566 i poczekalem 2 sek
Mam pid = 4564 i poczekalem 2 sek
i = 2
Mam pid = 4568 i poczekalem 2 sek
Mam pid = 4565 i poczekalem 2 sek
PID = 4571 PPID = 4564
Mam pid = 4564 i poczekalem 2 sek

$ ps
  PID TTY          TIME CMD
 4337 pts/0    00:00:00 bash
...
 

Dalsze modyfikacje pozwolą na określenie resztę zależnosci.

W. Richard Stevens, "Programowanie w środowisku systemu UNIX" polecam, wydawnictwo to samo co ANSI C Riczjego :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1