Comment pourrais-je «attacher» une vue console/terminal à une sortie d'applications pour que je puisse voir ce qu'elle peut dire?
Comment pourrais-je me détacher d'une sortie d'applications sans tuer l'application?
Normalement, si vous lancez une application bavarde en utilisant la ligne de commande, vous obtenez toutes sortes de sorties magnifiques. Cependant, disons que ma programmation est particulièrement bavarde, telle que KINO, et que je souhaite afficher sa sortie à tout moment sans la redémarrer via la ligne de commande. Je ne peux pas, du moins je ne sais pas comment.
Il y a quelques options ici. L'une consiste à rediriger la sortie de la commande vers un fichier, puis à utiliser "tail" pour afficher les nouvelles lignes ajoutées à ce fichier en temps réel.
Une autre option consiste à lancer votre programme à l'intérieur de 'screen', qui est une sorte d'application de terminal textuelle. Les sessions d’écran peuvent être attachées et détachées, mais sont nominalement destinées à être utilisées par le même utilisateur. Si vous souhaitez les partager entre utilisateurs, c’est très pénible.
Je pense que j'ai une solution plus simple ici, il suffit de chercher un nom dont le nom correspond au PID que vous recherchez, sous le pseudo système de fichiers accessible sous le chemin /proc
. Donc, si vous avez un programme en cours d'exécution, dont l'ID est 1199, insérez-le:
$ cd /proc/1199
Ensuite, recherchez le répertoire fd
ci-dessous
$ cd fd
Ce répertoire 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
Je cherchais exactement la même chose et j'ai constaté que vous pouviez faire:
strace -ewrite -p $PID
pas exactement ce dont vous aviez besoin, mais c'est assez proche
j'ai essayé la sortie de redirection mais cela n'a pas fonctionné pour moi, maby parce que le processus écrivait sur un socket
Comment pourrais-je 'attacher' un console/terminal-view à un la sortie des applications afin que je puisse voir quoi c'est peut-être dire?
À propos de cette question, je sais qu'il est possible de capturer la sortie, même si vous n'avez pas lancé de commande sceen avant de lancer le processus.
Bien que je n’aie jamais essayé, j’ai trouvé un article intéressant qui explique comment utiliser GDB (et sans redémarrer votre processus).
redirection-sortie-d'un-processus-en cours
Fondamentalement:
En passant, si vous utilisez un système d’exploitation Linux sous i386, les commentaires parlent d’un meilleur outil pour rediriger la sortie vers une nouvelle console: 'retty'. Si tel est le cas, envisagez son utilisation.
Je souhaitais suivre à distance un processus de mise à niveau yum exécuté localement. Par conséquent, bien qu'il existe probablement des moyens plus efficaces de procéder, voici ce que j'ai fait:
regarder le chat/dev/vcsa1
Évidemment, vous voudriez utiliser vcsa2, vcsa3, etc., en fonction du terminal utilisé.
tant que la fenêtre de mon terminal avait 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 2 secondes. Les autres commandes recommandées ailleurs ne fonctionnaient pas particulièrement bien dans ma situation, mais celle-ci faisait l'affaire.
Pour moi, cela a fonctionné:
Connectez-vous en tant que propriétaire du processus (même si root
n'a pas l'autorisation)
~$ su - process_owner
Terminez le descripteur de fichier comme mentionné dans de nombreuses autres réponses.
~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)