Tengo el proceso principal bifurcado dos veces y, por lo tanto, creo dos hijos. Los dos niños se canalizan entre sí de esta manera:El último hijo ahorquillado no va a morir
ls | more
Ahora el problema es que el segundo hijo nunca muere. ¿Porqué es eso? ¿Cuándo muere realmente el último niño en una tubería?
Al eliminar wait() la llamada muestra el resultado esperado de ls | more
, pero da algunos comportamientos extraños (terminal atascado, etc.).
Aquí está mi código:
int main(){
printf("[%d] main\n", getpid());
int pip[2], i;
pipe(pip);
/* CHILDREN*/
for (i=0; i<2; i++){
if (fork()==0){
/* First child */
if (i==0){
printf("[%d] child1\n", getpid());
close(1); dup(pip[1]);
close(pip[0]);
execlp("ls", "ls", NULL);}
/* Second child */
if (i==1){
printf("[%d] child2\n", getpid());
close(0); dup(pip[0]);
close(pip[1]);
execlp("more", "more", NULL);}
}
}
wait(NULL); // wait for first child
wait(NULL); // wait for second child
return 0;
}
El título de esta pregunta suena muy violento. – Marlon
@Marlon jaja no lo veía así hasta ahora! – Pithikos