fork system call understanding

 
Thread Tools Search this Thread
Homework and Emergencies Homework & Coursework Questions fork system call understanding
# 1  
Old 03-02-2010
fork system call understanding

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

1. The problem statement, all variables and given/known data:

i have a problem in understanding the behaviour of fork .

i understood fork as to create a new process and all the statements that fall after fork are executed by both old and new process.

here's the code i have written and i dont understand how its produced so - called out put.



2. Relevant commands, code, scripts, algorithms:


3. The attempts at a solution (include all code and scripts):
Code:
#include<stdio.h>

int main( void ) {
        int i ;
        i = 0 ;
        int x;
        while ( i < 2) {
                printf("before fork():getpid()= %d \n", getpid());
                x = fork();
                if ( x == 0 ) {
                        printf("in child when i = %d ", i);
                        printf("getpid()= %d", getpid());
                        printf("getppid()= %d\n",getppid());
                }
                else {
                        printf("in parent when i = %d ", i);
                        printf("getpid()= %d", getpid());
                        printf("getppid()= %d\n",getppid());
                }
                i++;
                printf("\n");
        }
return 0;
}

the out put what i am getting is :

Quote:
before fork():getpid()= 6864
in parent when i = 0 getpid()= 6864getppid()= 1777

before fork():getpid()= 6864
in child when i = 0 getpid()= 6865getppid()= 6864

before fork():getpid()= 6865
in child when i = 1 getpid()= 6866getppid()= 6864

in child when i = 1 getpid()= 6867getppid()= 6865

in parent when i = 1 getpid()= 6864getppid()= 1777

in parent when i = 1 getpid()= 6865getppid()= 6864


please just provide the meaning full description or modify the code so that i can understand it easily.
4. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):

VSU,Bangalore,India,Govardhan.

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).
# 2  
Old 03-02-2010
Your program creates four processes.Because two child processes creates another two child processes.Because,the loop runs twice for each process.
# 3  
Old 03-02-2010
MySQL Explanation

Normally when we use fork the child will inherit the workspace of the parent.And also the child and the parent will run simultaneously.and any one can finish its process first.

Now come to your doubt,

Your while loop runs twice.Beginning of the loop you print some thing like " before fork():getpid()= 6010 " .When the first iteration a child process will get create.So the child and parent start to run simultaneously.So the statements can print in any order.

So the child have a provision the iterate the loop.So it will print the "before fork statement" .When the next iteration of the loop also the "bofore fork will get print.And the child process will get create and the appropriate statements will get print.

When the try for the next iteration the condition will get false.So it will come out.

Here :
One of the "before fork" statement is printed by the child process.
# 4  
Old 03-03-2010
Quote:
Originally Posted by karthigayan
Normally when we use fork the child will inherit the workspace of the parent.And also the child and the parent will run simultaneously.and any one can finish its process first.

Now come to your doubt,

Your while loop runs twice.Beginning of the loop you print some thing like " before fork():getpid()= 6010 " .When the first iteration a child process will get create.So the child and parent start to run simultaneously.So the statements can print in any order.

So the child have a provision the iterate the loop.So it will print the "before fork statement" .When the next iteration of the loop also the "bofore fork will get print.And the child process will get create and the appropriate statements will get print.

When the try for the next iteration the condition will get false.So it will come out.

Here :
One of the "before fork" statement is printed by the child process.

is there any technique to print the statements in the right order.
by right order i mean : to print the statements that come under same process rather than printing randomly.

i am unable to understand the process concept it self.
# 5  
Old 03-03-2010
MySQL

Yeah ! you can do this using the wait,waitpid functions.

man wait

Refer this urls too :

http://www.cim.mcgill.ca/~franco/OpS...es/node16.html
http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Ubuntu

Help: how to call fork() in shell script? New to linux

Hi, I'm writing a shell script where I want to call fork(). However I wrote like this "var=fork()" in c style and got this error: "syntax error near unexpected token `(' " How could I call fork() in shell script? Thanks in advance. (2 Replies)
Discussion started by: Xiaoya
2 Replies

2. Shell Programming and Scripting

Help: how to call fork() in shell script? New to linux

Hi, I'm writing a shell script where I want to call fork(). However I wrote like this "var=fork()" in c style and got this error: "syntax error near unexpected token `(' " How could I call fork() in shell script? Thanks in advance. Duplicate Post - Continue Here - Please Do Not Cross Post... (0 Replies)
Discussion started by: Xiaoya
0 Replies

3. UNIX for Advanced & Expert Users

Doubt with fork() system call

Hi I wrote a simple fork program to illustrate the fork() system cal. here it is #include<stdio.h> #include<sys/stat.h> #include<sys/types.h> main() { int flag; flag=fork(); if(flag==0) { printf("Child \n"); printf("Process id= %d\n",getpid()); ... (3 Replies)
Discussion started by: badsha6642
3 Replies

4. Programming

Problem with execution of fork system call if i use \n

hi all, i tried the following source codes: fork1.c: main() { printf("demo of fork\n"); fork(); printf("hello"); } output: demo of fork hello hello fork2.c: main() (3 Replies)
Discussion started by: pnirmala
3 Replies

5. Shell Programming and Scripting

fork system call and \n

hi, i tried the following source codes: fork1.c: main() { printf("demo of fork\n"); fork(); printf("hello"); } output: demo of fork hello hello fork2.c: main() { printf("demo of fork"); (0 Replies)
Discussion started by: pnirmala
0 Replies

6. UNIX for Dummies Questions & Answers

fork system call

Hi folks, I want to know how this below program works? #include <stdio.h> int main() { printf("A\n"); fork(); printf("B\n"); fork(); fork(); printf("D\n"); fork(); printf("C\n"); } This is just for example. How this type of programs where fork is used many places, how the... (1 Reply)
Discussion started by: u_peerless
1 Replies

7. UNIX for Dummies Questions & Answers

fork() system call

Can anyone explain me what really happens when a system call fork() is called ? I like to know what happens internally. Thanks in Advance. - Arun (1 Reply)
Discussion started by: arunviswanath
1 Replies

8. UNIX for Advanced & Expert Users

how to differentiate system call from library call

Hi, Ho do I differentiate system call from library call? for example if I am using chmod , how do I find out if it is a system call or library call? Thanks Muru (2 Replies)
Discussion started by: muru
2 Replies

9. Programming

Fork() system call time?

One more question. How can i calculate the time that system needs to make fork() system call? I need to make it with times function but i really don't know how. :( (2 Replies)
Discussion started by: davidoff
2 Replies

10. UNIX for Advanced & Expert Users

URGENT Help required regarding the use of FORK system call

I desperately wanted one of the UNIX Gurus to help me resolve my problem asap(I have to deliver the code to the client by Monday 08-oct). I have a file with around 5 million records (50 lakhs). Now my original process was taking around 30 hours to read the complete file, process each and every... (4 Replies)
Discussion started by: kkumar1975
4 Replies
Login or Register to Ask a Question