Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Hello I am working on a C program that uses fork() and i to change my output of

ID: 3670915 • Letter: H

Question

Hello I am working on a C program that uses fork() and i to change my output of my program to be like the following:

Parent: pid 8606 forked

Parent: child number 0 with pid 8606 exec'd at Sat Jan 31 07:58:31 2015

Child: pid 8606 executing with sleep 2 at Sat Jan 31 07:58:31 2015

Parent: pid 8607 forked

Parent: child number 1 with pid 8607 exec'd at Sat Jan 31 07:58:31 2015

Parent: pid 8608 forked

Parent: child number 2 with pid 8608 exec'd at Sat Jan 31 07:58:31 2015

Child: pid 8607 executing with sleep 1 at Sat Jan 31 07:58:31 2015

Parent: pid 8609 forked

Parent: child number 3 with pid 8609 exec'd at Sat Jan 31 07:58:31 2015

Child: pid 8608 executing with sleep 6 at Sat Jan 31 07:58:31 2015

Parent: pid 8610 forked

Parent: child number 4 with pid 8610 exec'd at Sat Jan 31 07:58:31 2015

Child: pid 8609 executing with sleep 5 at Sat Jan 31 07:58:31 2015

Child: pid 8610 executing with sleep 8 at Sat Jan 31 07:58:31 2015

Parent: child pid 8606 exited normally with status 2 at Sat Jan 31 07:58:33 2015

Parent: child pid 8607 exited normally with status 1 at Sat Jan 31 07:58:33 2015

Parent: child pid 8608 exited normally with status 6 at Sat Jan 31 07:58:37 2015

Parent: child pid 8609 exited normally with status 5 at Sat Jan 31 07:58:37 2015

Parent: child pid 8610 exited normally with status 8 at Sat Jan 31 07:58:39 2015

My program so far:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main(){
    pid_t myprocessid, child_pid, getpid(); //Added getpid();
    int mystatus;
    myprocessid = getpid();
    printf("Parent process and the pid %d. ", myprocessid);
    child_pid = fork();
    if (child_pid == 0)
    {
        printf("Child1 from parent with pid: %d. ", myprocessid);
        myprocessid = getpid();
        printf("Child1: getpid2() for parent is %d. childid is %d. ", getpid(), myprocessid);
        child_pid = fork();
        if ( child_pid == -1 )
        {
            perror("error while fork");
            return 1;
        }
        else if (child_pid == 0)
        {
            printf("Child3 from parent with pid: %d. ", myprocessid);
            myprocessid = getpid();
            printf("Child3: getpid() for parent is %d. childid is %d. ", getpid(), myprocessid);
            sleep(30);
            return 12;
        }
        else
            return 15;
    }
    else if(child_pid == -1)
    {
        while ( waitpid(child_pid, &mystatus, WNOHANG) == 0 )
            sleep(1);
        if ( WIFEXITED(mystatus) )
            printf("Child1: Child2 exited with exit status %d. ", WEXITSTATUS(mystatus));
        else
            printf("Child1: child hasn't ended correctly. ");
    }
    else {
      
        printf("Parent: fork() Ok. Child's PID: %d ", child_pid);
        wait(&mystatus);
      
        if ( WIFEXITED(mystatus))
            printf("Parent: child has exited with exit status %d. ",
                   WEXITSTATUS(mystatus));
        else
            printf("Parent: child hasn't ended correctly. ");
    }
    return 0;
}

Explanation / Answer

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

#include <sys/wait.h>

int main(){

    pid_t myprocessid, child_pid, getpid() //Added getpid()

    int mystatus

    myprocessid = getpid()

    printf("Parent : pid %d. forked", myprocessid)

    child_pid = fork()

    if (child_pid == 0)

    {

        printf("Child1 number 0 with pid: %d. exec'd at ", myprocessid)

   

        myprocessid = getpid()

        printf("Child2: getpid2() with pid %d. exe'd", getpid(),

    myprocessid)

    child_pid = fork()

    if ( child_pid == 1)

    {

        perror("error while fork")

        return 1

    }       

else if (child_pid == 0)

else if (child_pid == 0)

{   

printf("Child3 from parent with pid: %d. ", myprocessid)

myprocessid = getpid()

printf("Child3: pid %d. exec'd ", getpid(),

myprocessid)

sleep(30)

    return 12

}

else

    return 15

}

else if(child_pid == 1)

{

    while ( waitpid(child_pid, &mystatus, WNOHANG) == 0 )

        sleep(1)

                if ( WIFEXITED(mystatus) )

                    printf("Child1: Child2 exited with exit status %d. ",WEXITSTATUS(mystatus))

                else

                    printf("Child1: child hasn't ended correctly. ")

}

else {

        printf("Parent: pid: %d forked", child_pid)

      wait(&mystatus)

        if ( WIFEXITED(mystatus))

            printf("Parent: child has %d with exit normally ",WEXITSTATUS(mystatus))

        else

            printf("Parent: child hasn't ended correctly. ")

}

return 0

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote