?
Solved

fork() function in unix

Posted on 2007-12-04
18
Medium Priority
?
2,663 Views
Last Modified: 2008-02-01
hi there
I have a homework that has a class like this
#include csapp.h
void end(void){
printf("2");
}
int main(){
if(Fork()==0)
atexit(end);
}
if(Fork==0)
printf("0");
else
printf("1");
exit(0);
}


the question is to determine which of the input below are possible. The atexit funtiontak apointer to a function and add it to a list of functions(initial empty) that will be called when the exit() is called

A. 112002
B. 211020
C. 102120
D. 122001
E. 100212

In my opinion
D is the correct answer since 1 can be called then 2 2 since fork can be at 0 0 then 00 1 but I am not very sure and wanted to ask you guys

Thanks
0
Comment
Question by:dminh01
  • 10
  • 7
18 Comments
 
LVL 85

Expert Comment

by:ozo
ID: 20409225
I disagree
0
 

Author Comment

by:dminh01
ID: 20409249
can you guide me a bit? as I understand whenever we call Fork() we will get 2 return: 1 in the parent and one in child. Since atexit(end) will add the print "2" everytime exit() is called so the possible is if FOrk==0 then it will add 22 firstly or 00 else 11. Since the only choice I see is D which has 2200 together it will make sense to me

thanks for your explanation
0
 
LVL 85

Expert Comment

by:ozo
ID: 20409251
Assuming you meant
void end(void){
  printf("2");
}
int main(){
  if(fork()==0)
    atexit(end);
if(fork()==0)
     printf("0");
     else
     printf("1");
exit(0);
}
there are more than one correct answers
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:dminh01
ID: 20409258
well but can u explain how to find that value. I am new to this and still not quite get it how it is working. does fork() return twice as I mentioned?

thanks
0
 
LVL 85

Expert Comment

by:ozo
ID: 20409264
In each process, some things are always called before exit,
but something in one process can run before or after something in a different processes
0
 

Author Comment

by:dminh01
ID: 20409287
thanks but so does the fork has to return twice when called?
0
 
LVL 85

Accepted Solution

by:
ozo earned 2000 total points
ID: 20409290
How many different processes are involved?
What is the output from each process?
What are possible outputs of
void end(void){
  printf("(%d)2",getpid());
}
int main(){
  if(fork()==0)
    atexit(end);

if(fork()==0)
     printf("(%d)0",getpid());
     else
     printf("(%d)1",getpid());
exit(0);
}
0
 

Author Comment

by:dminh01
ID: 20409292
also in process can something be called twice?
thanks
0
 
LVL 85

Expert Comment

by:ozo
ID: 20409293
fork returns twice, once in the parent and once in the child, unless it fails
0
 
LVL 85

Expert Comment

by:ozo
ID: 20409321
What would the possible outputs be if fork did not return twice?
for example if you had had
#define fork() (0)
or
#define fork() (1)
or
#define fork() (rand())
0
 

Author Comment

by:dminh01
ID: 20409335
look like C will be a good choice
102120
0
 

Author Comment

by:dminh01
ID: 20409344
I think I get it C and E
Thanks for your help. So fork alwasy return value of parent first then child
0
 
LVL 85

Expert Comment

by:ozo
ID: 20409351
It is true that 102120 is a possible output
0
 
LVL 85

Expert Comment

by:ozo
ID: 20409357
either the child or the parent can run first.  they can run at the same time or go back and forth
0
 
LVL 53

Expert Comment

by:Infinity08
ID: 20409940
>> I think I get it C and E

Are you sure that's all ?
0
 
LVL 85

Expert Comment

by:ozo
ID: 20413217
That's not all
0
 

Author Comment

by:dminh01
ID: 20413334
also B
0
 
LVL 85

Expert Comment

by:ozo
ID: 20413439
How to you get 2 first?
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Having just graduated from college and entered the workforce, I don’t find myself always using the tools and programs I grew accustomed to over the past four years. However, there is one program I continually find myself reverting back to…R.   So …
When we want to run, execute or repeat a statement multiple times, a loop is necessary. This article covers the two types of loops in Python: the while loop and the for loop.
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.
Suggested Courses
Course of the Month15 days, 7 hours left to enroll

840 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question