2010-10-19 12 views

Respuesta

7

Es posible usar gdb. La pregunta ya está respondida en this thread.

+0

Usar el depurador para obligar al código a ejecutarse en el proceso objetivo no es un procedimiento 'bash'. – bmargulies

+1

@bmargulies: '(printf 'p dup2 (abierto ("/dev/null ", 1), 1) \ np dup2 (1,2) \ ndetach \ n'; sleep 1) | gdb -p $ my_pid' lo suficientemente bien como un shellscript. De acuerdo, 'gdb' no es POSIX, pero tampoco hay muchos bash-ismos :) – Jander

4

No, al menos, no es confiable.

Cuando un proceso se bifurca, tiene (al menos) sus primeros tres descriptores de archivos organizados por su padre antes de la bifurcación(), por lo que los hereda.

Después de la horquilla, sin código de kernel, no hay nada que ningún otro proceso aparte de ese proceso pueda hacerles.

Bien, bueno, casi nada. Las llamadas al sistema que los depuradores de soporte (por ejemplo, gdb) pueden usarse para perforar memoria y forzar llamadas a funciones en un proceso. En un tubo de ensayo, esto se puede usar para cerrar y volver a abrir estos flujos. En la vida real, no se sabe si el proceso será desafortunado cuando lo atrapes en el depurador y responderá por autoinmolación si lo intentas.

+0

tos * gdb * ... tos * strace *. Tos * ¿Redirigir STDERR/STDOUT de un proceso DESPUÉS de que se haya iniciado, usando la línea de comando? * Http://stackoverflow.com/questions/593724 :) – SyntaxT3rr0r

+0

@Web, núcleo de la tos, pero veo tu punto. – bmargulies

+2

+1 para señalar que este hackeo gdb no está garantizado de ninguna manera que funcione correctamente. – Jander

Cuestiones relacionadas