Solved

fork() function in unix

Posted on 2007-12-04
18
2,634 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 10
  • 7
18 Comments
 
LVL 84

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 84

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
Independent Software Vendors: 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 84

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 84

Accepted Solution

by:
ozo earned 500 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 84

Expert Comment

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

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 84

Expert Comment

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

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 84

Expert Comment

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

Author Comment

by:dminh01
ID: 20413334
also B
0
 
LVL 84

Expert Comment

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

Featured Post

Independent Software Vendors: 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!

Question has a verified solution.

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

Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

696 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