2010-10-19 5 views

Répondre

7

Il est possible d'utiliser gdb. La question est déjà répondu dans this thread.

+0

L'utilisation du débogueur pour forcer le code à s'exécuter dans le processus cible n'est pas une procédure «bash». – bmargulies

+1

@bmargulies: '(printf 'p dup2 (open ("/dev/null ", 1), 1) \ np dup2 (1,2) \ ndetach \ n'; sleep 1) | gdb -p $ mon_pid' passe assez bien comme un shellscript. Certes, 'gdb' n'est pas POSIX, mais alors, pas beaucoup de bash-isms :) – Jander

4

Non, il n'y en a pas, du moins, pas vraiment fiable. Quand un processus est forké, il a (au moins) ses trois premiers descripteurs de fichiers arrangés par son parent avant fork(), donc il les hérite. Après la fourche, sans code de noyau, il n'y a rien que n'importe quel processus autre que ce processus peut leur faire.

OK, eh bien, presque rien. Les appels système qui supportent les débogueurs (par exemple, gdb) peuvent être utilisés pour piquer la mémoire et forcer les appels de fonction dans un processus. Dans un tube à essai, ceci peut être utilisé pour fermer et rouvrir ces flux. Dans la vraie vie, il est impossible de dire si le processus sera dans un état vraiment malheureux quand vous l'attrapez dans le débogueur, et répondra par l'auto-immolation si vous essayez cela.

+0

toux * gdb * ... toux * strie *. Tough * Rediriger STDERR/STDOUT d'un processus APRÈS qu'il a été commencé, en utilisant la ligne de commande? * Http://stackoverflow.com/questions/593724 :) – SyntaxT3rr0r

+0

@Web toux noyau, mais je vois votre point de vue. – bmargulies

+2

+1 pour signaler que ce hackery gdb n'est en aucun cas garanti pour fonctionner correctement. – Jander

Questions connexes