Cuando canaliza dos procesos y mata uno en la "salida" de la tubería, el primer proceso utilizado para recibir la señal "Tubo roto", que generalmente también lo termina. P.ej. corriendo¿Tubo roto ya no termina los programas?
$> do_something_intensive | less
y se sale de menos utilizados para volver inmediatamente a una cáscara de respuesta, en un SuSE8 o anteriores versiones. cuando intento que hoy, do_something_intensive obviamente sigue ejecutándose hasta que lo mate manualmente. Parece que algo ha cambiado (glib? Shell?) Que hace que el programa ignore las "tuberías rotas" ...
¿Alguien de ustedes tiene pistas sobre esto? cómo restaurar el comportamiento anterior? ¿Por qué ha sido cambiado (o por qué siempre existió semántica múltiple)?
editar: pruebas adicionales (utilizando strace) revelan que "SIGPIPE" se genera, pero que el programa no se interrumpe. Un simple
#include <stdio.h>
int main()
{
while(1) printf("dumb test\n");
exit(0);
}
continuará con una interminable
--- SIGPIPE (Broken pipe) @ 0 (0) ---
write(1, "dumb test\ndumb test\ndumb test\ndu"..., 1024) = -1 EPIPE (Broken pipe)
cuando menos se mata. Seguro que pude por programa de un manejador de señales en mi programa y asegurarse de que termina, pero estoy más en busca de alguna variable de entorno o una opción del shell que obligaría a los programas de interrumpir el SIGPIPE
editar nuevamente: parece ser un problema específico de tcsh (bash lo maneja correctamente) y dependiente de la terminal (Eterm 0.9.4)
Sería de gran ayuda saber qué shell que está utilizando, y más específicamente acerca de lo que realmente hace do_something_intensive. Además, ¿a qué te refieres con "obviamente todavía funcionando"? ¿Aparece en una lista de ps, o es que el shell no responde? ¡Siéntete libre de editar tu pregunta con más detalles! – ehdr
aparece en una lista de PS, el sheel no responde hasta que elimino toda la cadena con CTRL + C y el uso de la CPU aumenta en gkrellm. el shell en uso es tcsh, como se menciona ahora en la pregunta más detallada. Gracias por tu comentario. – PypeBros