background image

Fork1. 
 

#include

 

<stdio.h>

 

#include

 

<stdlib.h>

 

#include

 

<unistd.h>

 

#include

 

<process.h>

 

 

 

int

 main

int

 argc, 

char

 *argv[]) { 

(

 

printf

(

"Fork.\n Uruchomienie: fork1 k1 k2\n"

); 

 

printf

(

"k1 - liczba kroków procesu macierzystego\n"

); 

 

printf

(

"k2 - liczba kroków procesu potomnego"

); 

 

 

int

 pid = 0; 

 

int

 i = 0; 

 

int

 j = 0; 

 

int

 k1 = 0; 

 

int

 k2 = 0; 

 k1 

atoi

(argv[1]); 

 k2 

atoi

(argv[2]); 

 

 

if

( ( pid = 

fork

()) == 0 ) 

 { 

 

 

printf

(

" Proces potomny PID: %d \n"

getpid

()); 

 

 

for

( i=1; i < k2; i++ ) 

 

 

 

 

 

printf

(

"Potomny - krok %d, j= %d\n"

, i,j); 

 

 

 

sleep

(1); 

 

 

 

 

exit

(0); 

 } 

 

else

 

 { 

 

 

printf

(

"Proces macierzysty PID: %d \n"

getpid

()); 

 

 

for

(j=1;j<k1;j++) 

 

 

 

 

 

printf

(

"Macierzyst - krok %d, 1= %d\n"

, j,i); 

 

 

 

sleep

(1); 

 

 

 } 

 

 

printf

(

"Koniec"

); 

 

return

 0; 

 
Fork2 
 

#include

 

<stdio.h>

 

#include

 

<stdlib.h>

 

#include

 

<unistd.h>

 

#include

 

<process.h>

 

 

 

int

 main

int

 argc, 

char

 *argv[]) { 

(

 

printf

(

"Fork2.\n Uruchomienie: fork1 k1 k2\n"

); 

 

printf

(

"k1 - liczba kroków procesu macierzystego\n"

); 

 

printf

(

"k2 - liczba kroków procesu potomnego"

); 

 

 

int

 pid = 0; 

 

int

 i = 0; 

background image

 

int

 j = 0; 

 

int

 k1 = 0; 

 

int

 k2 = 0; 

 

int

 status = 0; 

 k1 

atoi

(argv[1]); 

 k2 

atoi

(argv[2]); 

 

 

if

( ( pid = 

fork

()) == 0 ) 

 { 

 

 

printf

(

" Proces potomny PID: %d \n"

getpid

()); 

 

 

for

( i=1; i < k2; i++ ) 

 

 

 

 

 

printf

(

"Potomny - krok %d, j= %d\n"

, i,j); 

 

 

 

sleep

(1); 

 

 

 

 

exit

(k2); 

 } 

 

else

 

 { 

 

 

printf

(

"Proces macierzysty PID: %d \n"

getpid

()); 

 

 

for

(j=1;j<k1;j++) 

 

 

 

 

 

printf

(

"Macierzyst - krok %d, 1= %d\n"

, j,i); 

 

 

 

sleep

(1); 

 

 

 } 

 

 pid 

wait

(&status); 

 

printf

(

"Proces %d zakończony, status %d\n"

, pid, 

WEXITSTATUS(status)); 

 

printf

(

"Koniec"

); 

 

return

 0; 

 
My_prog. 
 

#include

 

<stdlib.h>

 

#include

 

<stdio.h>

 

 

int

 main(

int

 argc, 

char

 *argv[]) { 

 

int

 i = 0; 

 

printf

(

"Liczba argumentow: %d\n"

, argc); 

 

for

( i=0; i < argc; i++) 

 { 

 

 

printf

(

"argv[%d]=%s\n"

, i, argv[i]); 

 } 

 

 

printf

(

"Koniec\n"

); 

 

return

 0; 

 
Execl 
 

#include

 

<stdlib.h>

 

#include

 

<stdio.h>

 

#include

 

<process.h>

 

#include

 

<unistd.h>

 

#include

 

<sys/wait.h>

 

 

int

 main(

int

 argc, 

char

 *argv[]) { 

background image

 

int

 pid = 0; 

 

int

 i =0; 

 

int

 status = 0; 

 

 

if

( (pid=

fork

())==0 ) 

 { 

 

 

execl

"my_prog"

"my_prog"

"par1"

"par2"

, NULL );

 

 

perror

(

"Blad funkcji exec"

); 

 } 

 

else

 

 { 

 

 

for

(i=1;i<10;i++) 

 

 

 

 

 

printf

(

"Macierzysty - krok %d \n"

, i); 

 

 

 

sleep

(1); 

 

 

 } 

 pid 

wait

(&status); 

 

printf

(

"Proces %d zakonczony, status %d\n"

, pid, 

WEXITSTATUS(status)); 

 

printf

(

"Koniec\n"

); 

 

return

 EXIT_SUCCESS; 

 
Spawn 

#include

 

<stdlib.h>

 

#include

 

<stdio.h>

 

#include

 

<process.h>

 

#include

 

<unistd.h>

 

#include

 

<sys/wait.h>

 

 

 

int

 main(

int

 argc, 

char

 *argv[]) { 

 

 

int

 pid = 0; 

 

int

 i =0; 

 

int

 res = 0; 

 

int

 status = 0; 

 

char

 buf[10]; 

 

for

(i=0;i<3;i++) 

 { 

  res 

spawnl

(P_NOWAIT,

"my_prog"

,

"my_prog"

,

itoa

(i,buf,10),NULL); 

 

 

if

( res<0) 

 

 

 

 

 

perror

(

"SPAWN"

); 

 

 

 

exit

(1); 

 

 

 } 

 

for

(i=1;i<10;i++) 

 { 

 

 

printf

(

"Macierzysty - krok %d\n"

,i); 

 

 

sleep

(1); 

 } 

 

while

((pid=

wait

(&status)) != -1 ) 

 { 

 

 

printf

(

"Proces %d zakonczony, status %d\n"

, pid, 

WEXITSTATUS(status)); 

 } 

 

printf

(

"Koniec\n"

); 

 

return

 EXIT_SUCCESS; 

background image