Когда я компилировал ваш код, он не работал при ошибках компиляции из-за отсутствия заголовков и нескольких синтаксических ошибок. Исправление тех, которые он бежал, как ожидалось для меня. Если ваш компилятор настроен на игнорирование предупреждений, или такие странные вещи могут произойти, если функции не созданы правильно.
В образовательных целях я добавил несколько дополнительных строк в ваш код.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <wait.h>
int main() {
int x = 100;
printf( "sizeof pid_t: %d\n", (int)sizeof(pid_t) );
fflush( stdout );
pid_t fork_result = fork();
if (fork_result < 0) {
fprintf(stderr, "Fork failed.\n");
exit(1);
} else if (fork_result == 0) {
sleep(2);
printf("Child value before: %d\n", x);
x = 200;
printf("Child value after: %d\n", x);
printf("Child fork_result=%d\n", (int)fork_result);
return(42);
} else {
printf("Parent value before: %d\n", x);
x = 300;
printf("Parent value after: %d\n", x);
printf("Parent fork_result=%d\n", (int)fork_result);
int xit_stat;
pid_t xit_wait = waitpid( fork_result, &xit_stat, 0 );
printf("Parent sees exit=%d\n", xit_stat >> 8);
}
return 0;
}