Да, родительский процесс и основной процесс - это одно и то же.
Этот фрагмент вашего кода должен дать вам подсказку о решении:
switch (pid) {
/* ... */
case 0:
printf("I am a child with pid = %d\n", (int)pid);
break;
Это фактически говорит "еслиpid
равно нулю, тогда дочерний pid всегда равен нулю ".Это, очевидно, не может быть правдой, так что ваша интерпретация возвращаемого значения fork()
является неверной.
Страница man гласит:
После успешного завершения fork ()возвращает значение 0 для дочернего процесса и возвращает идентификатор процесса дочернего процесса в родительский процесс.
Таким образом, переменная pid
в родительском процессе являетсяpid child , NOT pid родителя.
В дочернем процессе вам нужно будет позвонить getpid()
после fork()
чтобы получить собственный пид ребенка.