help with fork() command???


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting help with fork() command???
# 1  
Old 10-27-2011
Data help with fork() command???

Hi ,
help me out
Generally If the fork() is executed successfully Unix will create identical copies address spaces and the execution starts from the next statement of the fork()

So, in such case
output of the following prog must be
Code:
#include<stdio.h>
{
printf("\nwelcome to");
fork();
printf("\nDiscussion");
}

O/P as per the theory:
------------
Code:
welcome to 
Discussion
Discussion

but O/p coming is
Code:
welcome to 
Discussion
welcome to 
Discussion


Moderator's Comments:
Mod Comment Video tutorial on how to use code tags in The UNIX and Linux Forums.

Last edited by Franklin52; 10-27-2011 at 05:50 AM.. Reason: Please use code tags, thank you
# 2  
Old 10-27-2011
lets try like this Smilie
Code:
# cat justdoit.c
#include<stdio.h>
#include<string.h>
#include  <sys/types.h>
main()
{
char buf[128];
pid_t pid;

write(1, "Before Fork ", 12);
printf(" \n*********\n");
sleep(1);
write(1,"Welcome to  ",12);
printf(" \n\n");
sleep(3);
write(1,"Fork will executing soon", 22);
printf(" \n******************\n");
fork();
sleep(3);
pid = getpid();
sprintf(buf, "\nDiscussion is viewing from pid = %d\n",pid);
write(1, buf, strlen(buf));
printf(" \n");
sleep(1);
}

Code:
# gcc justdoit.c -o 1

firstly , main(parent) process is executing..
Code:
# ./1
root     11404 26043  0 16:12 pts/0    00:00:00 ./1 -> our parent process

output
Code:
Before Fork
*********
Welcome to

Fork will process soon
******************

Code:
// we use write() instead of printf for understanding what is going on..
because of printf() usually uses stdout buffer area for write the output
so i meant, printf() outputs will not be send to screen immediately //

when fork() process exucuted in your program , a child process is spawned by fork() and kernel
briefly,child process is copied in memory from the parent.

Code:
root     11404 26043  0 16:12 pts/0    00:00:00 ./1 -> parent process
root     11421 11404  0 16:12 pts/0    00:00:00 ./1 -> child process


and then "both processes" will execute the next instruction following the fork() system call

output
Code:
Discussion is viewing from pid = 11421 -> From Child


Discussion is viewing from pid = 11404 -> From Parent

regards
ygemici
This User Gave Thanks to ygemici For This Post:
# 3  
Old 10-27-2011
In short, printf() doesn't go directly to the screen -- it waits inside a memory buffer first. When you put a \n on the end, the buffer is flushed. Also, when the program quits, the buffer is flushed.

So, you are putting "welcome to" in the buffer and not printing it to screen before you fork().

The fork()ed process gets a copy of that buffer.

Then you print an \n in both, flushes the buffers in both. Not necessarily in any predictable order, just whenever each happens to be run!

Then they print the rest, quit, and flush again. Again, not necessarily in any predictable order!

If you must printf(), do fflush(stdout) before you fork().
This User Gave Thanks to Corona688 For This Post:
# 4  
Old 10-28-2011
@Corona688
thanks
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Fork!

I understand that fork create a child but I need very simple example that make child useful.... I mean how will make the program faster anyone explain with code plz using C plz (2 Replies)
Discussion started by: fwrlfo
2 Replies

2. UNIX for Dummies Questions & Answers

fork()

I'm trying to run a simple test on how to use fork(), i'm able to execute the child process first then the parent, but how can I execute parent then child..? Thanks! (1 Reply)
Discussion started by: l flipboi l
1 Replies

3. Shell Programming and Scripting

invoke fork command

Hi, I have startup shell script called "xxxxx" for Jboss server which is taking more than expected timeline to complete the process, here I want to use the fork command to start the child process for non dependent component I have a scheduler called "yyyy" which is currently getting invoked... (2 Replies)
Discussion started by: harish76
2 Replies

4. Programming

Fork()

does fork() spawn only the parent process, what if fork() is looped, does it spawn the parent and the child? (4 Replies)
Discussion started by: Peevish
4 Replies

5. Programming

fork() help

Hi everybody, I wanna write a code to understand how fork works. my target -------------- -Parent creates a file(called temp) and writes into this file "1".Then it closes the file. -Then parent creates a child and wait until execution of this child ends. -Then child opens the same... (3 Replies)
Discussion started by: alexicopax
3 Replies

6. Programming

Fork ()

hi all About this code for (i = 1; i < n; i++) if ((childpid = fork()) <= 0) break; I really can't understand the output . and the way fork () return the value . how about the process Id ,the child process Id and the parent ID in this case so please answer me soon (5 Replies)
Discussion started by: iwbasts
5 Replies

7. Programming

Fork or what?

Hello all. I'm developing a filetransfer application, which is supposed to work sort of like dcc, with multiple transfers etc. Now i wonder what the best way to manage the transfers is. Should i fork() for each new transfer, hogging loads of memory or use pthreads? Maybe I can use select to see... (0 Replies)
Discussion started by: crippe
0 Replies

8. Programming

fork()

#include <stdio.h> #include <string.h> #include <sys/types.h> #define MAX_COUNT 200 #define BUF_SIZE 100 void main(void) { pid_t pid; int i; char buf; fork(); pid = getpid(); for (i = 1; i <= MAX_COUNT; i++) { sprintf(buf,... (2 Replies)
Discussion started by: MKSRaja
2 Replies

9. Programming

fork() fd

I run this code, actually I want to both processes print the message from "data". But only one does. What happens? Anyone can help? #include <stdio.h> main(){ int fd, pid; char x; fd = open("data",0); /* open file "data" */ pid = fork(); if(pid != 0){ wait(0); ... (2 Replies)
Discussion started by: Herman
2 Replies

10. UNIX for Dummies Questions & Answers

Fork

What is a fork? Why would one create a fork? What are the advantages and disadvantages of using a fork? Please advise. Thank You. Deepali (5 Replies)
Discussion started by: Deepali
5 Replies
Login or Register to Ask a Question