You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
927 B
33 lines
927 B
6 years ago
|
#include <stdio.h>
|
||
|
int main()
|
||
|
{
|
||
|
int child, grandson;
|
||
|
char *sargs[] = { "/bin/echo", "Son ", "Hello", "World!", NULL};
|
||
|
char *gargs[] = { "/bin/echo", "Grandson ", "Hello", "World!", NULL};
|
||
|
|
||
|
if (!(child = fork()))
|
||
|
{
|
||
|
/* child */
|
||
|
printf("child:s1: pid %d: %d is my father\n", getpid(), getppid());
|
||
|
if(!(grandson=fork()))
|
||
|
{
|
||
|
printf("grandson: pid %d: %d is my father\n", getpid(), getppid());
|
||
|
execve("/bin/echo", gargs, NULL);
|
||
|
printf("pid %d: I am back, something is wrong!\n", getpid());
|
||
|
}else{
|
||
|
printf("child:s2: pid %d: %d is my father\n", getpid(), getppid());
|
||
|
wait4(grandson, NULL, 0, NULL);
|
||
|
execve("/bin/echo", sargs, NULL);
|
||
|
printf("pid %d: I am back, something is wrong!\n", getpid());
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
int myself = getpid();
|
||
|
printf("parent: pid %d: %d is my son\n", myself, child);
|
||
|
wait4(child, NULL, 0, NULL);
|
||
|
printf("pid %d: done\n", myself);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|