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;
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[]) {
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;
}