Я смотрел на какой-то простой код на форке и решил попробовать его для себя. Я скомпилировал, а затем запустил его из Emacs, и получил другой результат, отличный от того, который был получен при запуске его в Bash.
#include <unistd.h>
#include <stdio.h>
int main() {
if (fork() != 0) {
printf("%d: X\n", getpid());
}
if (fork() != 0) {
printf("%d: Y\n", getpid());
}
printf("%d: Z\n", getpid());
}
Я скомпилировал его с помощью gcc, а затем запустил a.out из Emacs, а также перенес его в cat
и grep .
, и получил это.
2055: X
2055: Y
2055: Z
2055: X
2058: Z
2057: Y
2057: Z
2059: Z
Это не правильно. Запустив его только из Bash я получаю (что я и ожидал)
2084: X
2084: Y
2084: Z
2085: Y
2085: Z
2087: Z
2086: Z
edit - пропущены некоторые новые строки
Что происходит?