Issue with forkbomb micro benchmark: The forkbomb microbenchmark create NFORK child, and then wait for the NFORK child to exit. Even though the child has exited and all the resources allocated to child has been revoked, the kernel has to store the "pid,status" of each child till the waitpid is executed by its parent(1. kernel has to return status for each pid in parent's waitpid call, 2. kernel needs to guarantee that pid is unique). Such an entry ("pid,status") in kernel is referred to as zombie process. There exists a max limit to the number of proc kernel can have, depending on the memory avail in the system etc. If you exceed this limit, any fork in the system will fail. This is one reason why others won't be able to try any command in system. Moreover, this means that, fork() in the forkbomb microbenchmark can also fail. The current microbenchmark code doesn't check for fork failures. The code will run without reporting an error as: fork will return -1 on failure, and waitpid will interpret pid with -1 value as wait for any child process. From man fork: On failure, -1 is returned in the parent From man waitpid: [ value of pid arg =] -1 means wait for any child process. If you exceed this limit, this can lead to your microbenchmark failing at random point in time. For example: In your host, which has 24G of RAM, max proc value may be high and your microbenchmark may run for more time. And the guest vm, if you allocate it 128MB RAM, will probabily have less number of max proc value. Hence: your forkbomb may appear to run really faster in Guest compared to Host. Solution: Call waitpid immediately after fork/fuse the two for loop in one for loop/see the forkwait code from VMWare paper we studied in class. Example Code: for(int i=0; i