Если вы измените
printf("hello world");
на
printf("hello world from %d", getpid());
Это добавит идентификатор процесса к выходу. Это может помочь вам понять, сколько процессов создано.
Я бы предложил изменить цикл в main, чтобы просто вызывать run_morecompute () до тех пор, пока вы не поймете, что происходит. Дополнительный fork () в run_compute () усложняет ситуацию.
Процесс верхнего уровня разветвляется на 4 дочерних процесса, которые вызывают run_compute (). Затем эти 4 ребенка становятся родителями и разворачивают еще 3 детей. Затем эти 12 детей запускают еще 2 процесса каждый ... и т. Д.
Надеюсь, это поможет.