Comment pourrais-je «attacher» une console / vue de terminal à la sortie d'une application pour que je puisse voir ce qu'elle peut dire?
Comment pourrais-je me détacher de la sortie d'une application sans tuer l'application?
Normalement, si vous lancez une application bavarde en utilisant la ligne de commande, vous obtenez toutes sortes de sorties merveilleuses. Cependant, disons que j'ai une programmation particulièrement bavarde en cours d'exécution, comme KINO, et que je veux voir sa sortie à tout moment sans la redémarrer via la ligne de commande. Je ne peux pas; au moins je ne sais pas comment.
linux
logging
command-line-interface
aggitan
la source
la source
Réponses:
Il y a quelques options ici. La première 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 basée sur du texte. Les sessions d'écran peuvent être attachées et détachées, mais elles sont théoriquement destinées uniquement à être utilisées par le même utilisateur, donc si vous voulez les partager entre utilisateurs, c'est une grosse douleur dans le cul.
la source
Je pense que j'ai une solution plus simple ici. Recherchez simplement un répertoire dont le nom correspond au PID que vous recherchez, sous le pseudo-système de fichiers accessible sous le
/proc
chemin. Donc, si vous avez un programme en cours d'exécution, dont l'ID est 1199,cd
dedans:Recherchez ensuite le
fd
répertoire en dessousCe
fd
répertoire contient les objets descripteurs de fichiers que votre programme utilise (0: stdin, 1: stdout, 2: stderr) et justetail -f
celui dont vous avez besoin - dans ce cas, stdout):la source
tail
car dans mon cas, la sortie était redirigée vers un autre processus pour l'entrée, maismore
m'a montré les données actuelles.more
travaille pour moi. ubuntu 14.04 sur un processus de nœudJe cherchais exactement la même chose et j'ai trouvé que vous pouviez faire:
Ce n'est 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. Peut-être parce que le processus écrivait sur une socket, je ne sais pas.
la source
À propos de cette question, je sais qu'il est possible d'attraper la sortie, même si vous n'avez pas lancé la commande sceen avant de lancer le processus.
Bien que je ne l'ai jamais essayé, j'ai trouvé un article intéressant qui explique comment utiliser GDB (et sans redémarrer votre processus).
redirection-de-sortie-d'un-processus-en-cours
Fondamentalement:
Au fait, si vous utilisez un système d'exploitation Linux sur 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.
la source
Pour moi, cela a fonctionné:
Connectez-vous en tant que propriétaire du processus (même si l'
root
autorisation est refusée)Complétez le descripteur de fichier comme mentionné dans de nombreuses autres réponses.
la source
Je voulais regarder à distance un processus de mise à niveau de yum qui avait été exécuté localement, donc s'il y avait probablement des moyens plus efficaces de le faire, voici ce que j'ai fait:
De toute évidence, vous voudrez utiliser vcsa2, vcsa3, etc., en fonction du terminal utilisé.
Tant que la fenêtre de mon 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 ne fonctionnaient pas particulièrement bien pour ma situation, mais celle-là a fait l'affaire.
la source