Я изучаю многопроцессорность и знаю, что при использовании fork () создается дочерний процесс, а дочерний получает копии сегментов стека, данных, кучи и текста родителя.
Так почему этот кодниже не выводятся два "привет"?
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
static int idata = 111; /* Allocated in data segment */
int main(int argc, char *argv[])
{
int istack = 222; /* Allocated in stack segment */
pid_t childPid;
idata *= 2;
istack *= 2;
printf("hello\n");
switch (childPid = fork()) {
case -1:
printf("fork fail\n");
exit(0);
case 0:
idata *= 3;
istack *= 3;
break;
default:
sleep(3); // Give child a chance to execute
break;
}
/* Both parent and child come here */
printf("PID=%ld %s idata=%d istack=%d\n", (long) getpid(),
(childPid == 0) ? "(child) " : "(parent)", idata, istack);
exit(0);
}
Результат:
привет
PID = 591 (дочерний) idata = 666 istack = 1332
PID = 590 (родительский) idata = 222 istack = 444
почему этот код не печатает два "привет"?