147 votes

Joindre une sortie de processus pour visualisation

Comment puis-je "attacher" une vue console/terminal à la sortie d'une application afin de voir ce qu'elle dit ?

Comment puis-je me détacher de la sortie d'une application sans tuer l'application ?

Normalement, si vous lancez une application bavarde à l'aide de la ligne de commande, vous obtenez toutes sortes de résultats intéressants. Cependant, disons que j'ai un programme particulièrement bavard en cours d'exécution, comme KINO, et que je veux voir ses résultats à tout moment sans le redémarrer par la ligne de commande. Je ne peux pas, du moins je ne sais pas comment.

8voto

yves Baumes Points 4521

Comment puis-je "attacher" un console/terminal à la sortie d'une d'une application pour que je puisse voir ce qu'elle ce qu'elle dit ?

A propos de cette question, je sais qu'il est possible de récupérer la sortie, même si vous n'avez pas lancé la commande sceen avant de lancer le processus.

Bien que je n'aie jamais essayé, j'ai trouvé un article intéressant qui explique comment le faire en utilisant GDB (et sans redémarrer votre processus).

redirection de la sortie d'un processus en cours d'exécution

En principe :

  1. Consultez la liste des fichiers ouverts pour votre processus, grâce à /proc/xxx/fd
  2. Joindre votre processus avec GDB
  3. Pendant qu'il est en pause, fermez le fichier qui vous intéresse en appelant fermer() (vous pouvez utiliser n'importe quelle fonction de votre processus dans GDB. Je soupçonne que vous avez besoin de symboles de débogage dans votre processus )
  4. Ouvrez un nouveau fichier en appelant le créer() ou la fonction open(). (Jetez un coup d'oeil aux commentaires à la fin, vous verrez que des personnes suggèrent d'utiliser dup2() pour s'assurer que la même poignée sera utilisée)
  5. Détacher le processus et le laisser se dérouler.

D'ailleurs, si vous utilisez un système d'exploitation linux sur une machine i386, les commentaires parlent d'un meilleur outil pour rediriger la sortie vers une nouvelle console : Retty . Si c'est le cas, envisagez son utilisation.

3voto

RedScourge Points 756

Je voulais surveiller à distance un processus de mise à niveau de yum qui avait été exécuté localement, et bien qu'il y ait probablement des moyens plus efficaces de le faire, voici ce que j'ai fait :

watch cat /dev/vcsa1

Il est évident que vous voudrez utiliser vcsa2, vcsa3, etc. en fonction du terminal utilisé.

Tant que ma fenêtre de terminal était de la même largeur que le terminal sur lequel la commande était exécutée, je pouvais voir un instantané de leur sortie actuelle toutes les deux secondes. Les autres commandes recommandées ailleurs n'ont pas particulièrement bien fonctionné dans ma situation, mais celle-ci a fait l'affaire.

1voto

caram Points 854

Une option encore plus simple est cat :

cat /proc/<pid>/fd/1

Surtout si tail ne fonctionne pas pour vous en raison d'erreurs d'autorisation (même en utilisant sudo ), ou si le processus à surveiller affiche une barre de progression à l'aide de curses ou d'une bibliothèque équivalente.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X