В этом коде вы создаете процесс Three, не включающий ваш основной процесс.
pid=fork()
сам по себе является оператором, который разветвляет новый процесс, даже если он находится внутри условия оператора if.После первого вызова fork () остальные коды будут выполнены дважды.поэтому следующий вызов fork будет вызван дважды.Вы уже создали новый процесс.
fork возвращает ноль себе и свой идентификатор процесса своему родителю
То есть процесс A разветвляется как B (не от вашегоcode)
pid = fork();
printf("pid is : %d",pid);
оператор printf выполняется дважды (один для A и один для B).Для A он печатает (A является родительским)
pid: 512 // некоторый идентификатор целочисленного значения процесса
и B печатает
pid: 0
Итак, в вашем вопросе
if(pid=fork()==0)
{
printf("\n the child process is created");
fun();
exit(1);
}
это второй форк, который уже выполняется дважды.Таким образом, каждое выполнение создает новый дочерний процесс.Для обоих дочерних элементов значение pid равно 0. Таким образом, выполняется оператор print, что вы видите в выводе.Но для обоих родителей будет указано значение pid, а ваше условие if не выполнено, поэтому оно не будет печататься.Эти два потомка - ваш второй и третий процессы. Итак, вкратце вы создаете 3 процесса вместе с основным процессом