Original
int val;
val=fork(); //val>0
#when fork() is called the OS creates a new process that is a copy of the calling process.
if(val>0)
cout <<"Parent" <<endl;
else
cout <<"Child" <<endl;
//output Parent
Child
int val;
val=fork();
//Child starts from here
if(val>0) //val is 0
cout <<"Parent" <<endl;
else
cout <<"Child" <<endl;
//output Child
output Child \n Parent
Another Example:
parent spawns 2 processes
fork();
fork();
cout<<"*"
child 1
fork();
cout<<"*"
child 2
cout<<"*"
child 1 then spawns a new process
cout<<"*"
output ****
fork() //A
cout <<"1"<<endl;
if(!fork()) //B
cout <<"2"<<endl;
else
cout <<"3"<<endl;
cout <<"4"<<endl;
int val = fork(); //A
if(val)
{fork(); //B
cout << "1" endl;}
else
cout<<"2"<<endl;
fork(); //C
cout<<"3"<<endl;
A fork()
//int val = fork(); //A
if(val)
{fork(); //B
cout << "1" endl;}
else
cout<<"2"<<endl;
fork(); //C
cout<<"3"<<endl;
B fork()
//{fork(); //B
cout << "1" endl;}
else
cout<<"2"<<endl;
fork(); //C
cout<<"3"<<endl;
C fork()
//fork(); //C
cout<<"3"<<endl;
int val - fork(); //A
if(val)
{
exec("no_output_prog");
fork();
fork();
}
fork(); //B
cout <<'*';
fork A
//int val - fork(); //A
//val is 0,
if(val)
{
exec("no_output_prog");
fork();
fork();
}
fork(); //B
cout <<'*';
fork B
//fork(); //B
cout <<'*';
if(fork())
{
wait();
cout<<'1'<<endl;}
}
else
cout <<'2'<<endl;
Wait() is expected to pause the calling process until child terminates