1
int main(int argc, char** argv) {
    int i = 0;
    while (i < 2) {
        fork();
        system("ps -o pid,ppid,comm,stat");
        i++;
     }
     return (EXIT_SUCCESS);
}

Can anyone tell me how many times ps command is executed with an explanation?

3
  • 7
    Run it and find out? Commented Aug 21, 2011 at 13:16
  • yea i just wanted someone to explain me y im getting 6 -_- Commented Aug 21, 2011 at 13:43
  • 1
    Its not that bad a question, The OP might've been confused at the strange answer at first, Fork isn't that easy to grasp. Commented Aug 21, 2011 at 14:01

3 Answers 3

6

I believe the answer is 6.

in the first iteration, fork() is called, splitting the process in 2, thus calling ps twice.

in the second iteration, fork is called again in each process, so you now have 4 processes running ps.

total calls to ps: 2+4=6.

Sign up to request clarification or add additional context in comments.

Comments

4

6 times.

It creates a process tree like this:

A-+
  |-B-+
  |   |-C-+
  |-D

A does it twice (i=0)

B does it twice (i=0)

C does it once (i=1)

D does it once (i=1)

Note that my usage of letters is to distinguish them. There's no predictable output ordering since process switching is non-deterministic to the eyes of a programmer.

1 Comment

Well spotted. I hope the OP gets a good grade in his assignment ;-)
1
Initial Process
i == 0
-> Fork 1
   system call
   i == 1
   -> Fork 1.1
      system call
   system call
system call
i == 1
-> Fork 2
   system call
system call

I count 6, 2 each from the initial process and the first fork (4), and one from each process forked when i == 1 from those 2 processes.

Of course that's assuming you fix the missing end brace (and define EXIT_SUCCESS), otherwise none, since it won't compile. :-)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.