Estaba buscando un código simple en el tenedor, y decidí probarlo por mi cuenta. Lo compilé y luego lo ejecuté desde dentro de Emacs, y obtuve una salida diferente a la salida producida al ejecutarlo en Bash.¿Por qué la salida de mi programa de horquilla es diferente cuando canalizo su salida?
#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());
}
He compilado con gcc, y luego corrió a.out desde dentro de Emacs, así como las tuberías que cat
y grep .
, y me encargo.
2055: X
2055: Y
2055: Z
2055: X
2058: Z
2057: Y
2057: Z
2059: Z
Esto no es correcto Ejecutarlo sólo de Bash recibo (que yo esperaba)
2084: X
2084: Y
2084: Z
2085: Y
2085: Z
2087: Z
2086: Z
edición - se perdió algunas nuevas líneas
¿Qué está pasando?
¿Por qué estás canalizando los resultados a través de cualquier cosa (especialmente "gato" que realmente no hará nada en absoluto)? - Oh, espera, son las tuberías las que introducen la rareza ... mmm ... – Pointy
Puedo reproducir esto, así que no son rayos cósmicos ni nada. Intrigante. Tenga en cuenta que falta un PID (2056) en la salida anterior; ese es probablemente el PID de 'cat'. – Thomas
Lo ejecuté varias veces, la mayoría de las cuales no tenían PID faltantes. – Squidly