web-dev-qa-db-fra.com

Peut-on récupérer une application en cours d'exécution depuis un terminal?

Parfois, j'ai besoin d'exécuter une application à partir d'un terminal pour le débogage. Si je suis sûr que le bogue surviendra peu après le lancement de l'application, je peux exécuter cette application à partir du terminal.

Cependant, des bugs surviennent de manière inattendue, et alors je n'ai plus qu'à surveiller l'application buggy 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 c'est le cas, comment?

26
Benjamin

Chaque processus sous 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 êtes uniquement intéressé par la sortie de diagnostic, vous pouvez déterminer le pid du processus, puis dans le terminal:

pour voir stdout:

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

pour voir stderr:

cat /proc/{pid of process}/fd/2
30
Michał Šrajer

Ou vous pouvez utiliser straceNAME _ comme ceci

Sudo strace -p $pid_of_the_process
9
arrange

Vous pouvez attacher avec 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.

6
enzotib

Vous recherchez probablement retty . Vous pouvez également rechercher "attach tty". Fondamentalement, c'est fait avec ptrace afin que vous puissiez même rouler le vôtre.

5
nc3b