если fork () успешно, он возвращает 0 дочернему элементу и идентификатор процесса родительскому элементу. Так что для родителей pid! = 0 и для детей это так. После первого if, перед строкой
pid = fork()
. Есть 3 процесса. Затем эти 3 процесса создают по одному новому дочернему элементу, который, в свою очередь, создает другого дочернего. Наконец, все процессы порождают одного дочернего процесса. Это дает нам (3 + 3 + 3) * 2 = 18 процессов, если ни один из fork () не завершится неудачей.