multiple processes stuck on same cpu after multiple 'fork's (Linux/C)

Go To


On a multi-core machine, why doesn't the CPU automatically move a process to a new core if there are multiple processes all on the same core at full capacity?

Here is a sample program which reproduces the problem I'm seeing:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

void RunClient(int i) {
  printf("Starting client %d\n", i);
  while (true) {

int main(int argc, char** argv) {
  for (int i = 0; i < 4; ++i) {
    pid_t p_id = fork();
    if (p_id == -1) {
    } else if (p_id == 0) {

  return 0;

This works as expected (when I check top, I see all 4 processes are running at 100%).

However, if I remove the "sleep(3)" line, then sometimes multiple processes are set to the same CPU and thus not running at full capacity (for example, one process might be at 100% while the other 3 are each at 33%). What's going on and how do I fix it?

I know I can manually set the CPU affinity, but that seems like a fragile solution?

2012-04-04 20:55
by Switch


This isn't an issue with your code, it's an issue with your OS scheduler. It works as expected for me (ubuntu 11.10) both with and without the sleep(3)

But +1 for posting an SSCCE

2012-04-04 21:04
by je4d