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.

376voto

licorna Points 1182

Je pense avoir une solution plus simple. Il suffit de chercher un répertoire dont le nom correspond au PID recherché, dans le pseudo-filesystem accessible sous le nom de /proc chemin. Ainsi, si vous avez un programme en cours d'exécution, dont l'ID est 1199, cd en son sein :

$ cd /proc/1199

Cherchez ensuite le fd sous le répertoire

$ cd fd

Le présent fd contient les objets descripteurs de fichiers que votre programme utilise (0 : stdin, 1 : stdout, 2 : stderr) et juste tail -f celui dont vous avez besoin - dans ce cas, stdout) :

$ tail -f 1

66voto

Paul Scheltema Points 721

Je cherchais exactement la même chose et j'ai trouvé que c'était possible :

strace -ewrite -p $PID

Ce n'est pas exactement ce dont vous aviez besoin, mais c'est assez proche.

J'ai essayé de rediriger la sortie, mais cela n'a pas fonctionné pour moi. Peut-être parce que le processus écrivait sur une socket, je ne sais pas.

23voto

Don Werve Points 3901

Il y a quelques options ici. L'une d'elles consiste à rediriger la sortie de la commande vers un fichier, puis à utiliser "tail" pour afficher en temps réel les nouvelles lignes ajoutées à ce fichier.

Une autre option consiste à lancer votre programme à l'intérieur de "screen", qui est une sorte d'application Terminal basée sur le texte. Les sessions Screen peuvent être attachées et détachées, mais elles sont nominalement destinées à n'être utilisées que par le même utilisateur, donc si vous voulez les partager entre utilisateurs, c'est une grosse galère.

13voto

akki Points 320

Pour moi, cela a fonctionné :

  1. Se connecter en tant que propriétaire du processus (même root se voit refuser l'autorisation)

    ~$ su - process_owner
  2. Remplir le descripteur de fichier comme indiqué dans de nombreuses autres réponses.

    ~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)

13voto

Zhigang Zhang Points 101

Vous pouvez utiliser reptyr :

sudo apt install reptyr
reptyr pid

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