Peut-on récupérer une application en cours d'exécution à partir du terminal?

26

Parfois, je dois exécuter une application à partir du terminal pour le débogage. Si je suis certain que le bogue surviendra peu après le lancement de l’application, je pourrai exécuter cette application à partir du terminal.

Cependant, des bogues surviennent de manière inattendue, et alors seulement je dois surveiller l’application buggée depuis le terminal (pour voir sa sortie).

Puis-je récupérer une application depuis un terminal qui n'a pas été lancé avec Terminal? Si oui comment?

    
posée Benjamin 01.09.2011 - 11:35
la source

4 réponses

29

Chaque processus de Linux a un répertoire spécial /proc/{pid}/fd/ . 0 est stdin, 1 est stdout et 2 est stderr. Donc, en supposant que vous ne soyez intéressé que par la sortie de diagnostic, vous pouvez déterminer le processus pid, puis dans le terminal:

pour voir stdout:

cat /proc/{pid of process}/fd/1

pour voir stderr:

cat /proc/{pid of process}/fd/2
    
réponse donnée Michał Šrajer 01.09.2011 - 11:49
la source
9

Vous pouvez également utiliser strace comme ceci

sudo strace -p $pid_of_the_process
    
réponse donnée arrange 01.09.2011 - 11:56
la source
6

Vous pouvez joindre gdb à un processus en cours d'exécution.

La syntaxe est

gdb program pid

Ok, vous ne pouvez pas voir le code source, si les informations de débogage sont supprimées, ce qui est la valeur par défaut pour les applications déployées. Mais vous pouvez probablement voir les messages stdout / stderr et debugger, segfaults.

    
réponse donnée enzotib 01.09.2011 - 11:47
la source
5

Vous recherchez probablement retty . Vous pouvez également chercher "attach tty". Fondamentalement, cela se fait en utilisant ptrace afin que vous puissiez même faire votre propre.

    
réponse donnée nc3b 02.09.2011 - 09:28
la source

Lire d'autres questions sur les étiquettes