Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   Pbolem with forking the process (http://www.go4expert.com/forums/pbolem-forking-process-t6456/)

Unitedroad 20Sep2007 13:37

Pbolem with forking the process
 
HI everyone ,
I am just experimenting with the fork function . I am having some problem with my code :

HTML Code:

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>

childprocess(int pid, int pnum);
main () {
        int pid, pid0, pid1, status, FD, tochild[2], toparent[2];
        FD = creat("new file.txt", S_IRWXU);
        if((pid = fork()) < 0) {
                printf("Could not fork process");
        } else {
                if(pid !=0)
                        [COLOR=Red]printf("\nProcess forked");[/COLOR]
        }
       
        if(pid == 0) childprocess(pid,1);
        //if(pid != 0) {
                pid = wait(&status);
                [COLOR=Red]printf("\nProcess (id %d ) exited ", pid);[/COLOR]
               
        //}
       
        if((pid1 = fork()) < 0) {
                printf("Could not fork second process");
        }else{
                if(pid1 !=0)
                        [COLOR=Red]printf("\nSecond process forked");[/COLOR]
        }       
        if(pid == 0) childprocess(pid,2);
       
//        if(pid != 0) {
                pid = wait(&status);
                [COLOR=Red]printf("\nProcess (id %d ) exited " , pid);[/COLOR]
//        }
        close(FD);
        exit(0);
}

childprocess(int pid, int pnum) {
        float i = 0;
        int index = 0;
        for(index = 0; index < 900; index++) {
        }
        //printf("\nPID %d matches index : %d", pid, pnum);
        exit(0);
}

Here I have forked the process twice. It waits after each subsequent fork call while the childprocess goes to a new method where it eventually quits.

However the output is showing some strange behaviour. THis is the output of the code :

root@unitedroad-desktop:~/Desktop# ./wait3.out

Process forked
Process (id 13402 ) exited Process (id 13402 ) exited
Second process forked
Process (id 13403 ) exited

This seems a little stran as the process id 13402 sems to exit twice and inspite of me using the newline character at the begining of each string that I am printing, the second "exit line" does not start on the new line.
KIndly help me in identifing the reason for this.

Regards,
Dhruwat

Unitedroad 20Sep2007 13:42

Re: Pbolem with forking the process
 
I actually osted the code Ihad changed a little to see if it could work but left in the middle I am sorry for that and also for maiking the code so hard to read with stupid applicatipn of tags.

The code I compiled is :
Code:

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>

childprocess(int pid, int pnum);
main () {
        int pid, pid0, pid1, status, FD, tochild[2], toparent[2];
        FD = creat("new file.txt", S_IRWXU);
        if((pid = fork()) < 0) {
                printf("Could not fork process");
        } else {
                if(pid !=0)
                        printf("\nProcess forked");
        }
       
        if(pid == 0) childprocess(pid,1);
        //if(pid != 0) {
                pid = wait(&status);
                printf("\nProcess (id %d ) exited ", pid);
               
        //}
       
        if((pid = fork()) < 0) {
                printf("Could not fork second process");
        }else{
                if(pid !=0)
                        printf("\nSecond process forked");
        }       
        if(pid == 0) childprocess(pid,2);
       
//        if(pid != 0) {
                pid = wait(&status);
                printf("\nProcess (id %d ) exited " , pid);
//        }
        close(FD);
        exit(0);
}

childprocess(int pid, int pnum) {
        float i = 0;
        int index = 0;
        for(index = 0; index < 900; index++) {
        }
        //printf("\nPID %d matches index : %d", pid, pnum);
        exit(0);
}



All times are GMT +5.5. The time now is 07:31.