Je pense avoir une solution plus simple ici. Cherchez simplement un répertoire dont le nom correspond au PID recherché, 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 :
$ cd /proc/1199
Recherchez ensuite le fd
répertoire en dessous
$ cd fd
Ce fd
répertoire 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 trouvé que vous pouviez faire :
strace -ewrite -p $PID
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 un socket, je ne sais pas.
Pour moi, cela a fonctionné :
-
Connectez-vous en tant que propriétaire du processus (même
root
se voit refuser l'autorisation)~$ su - process_owner
-
Suivez 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)
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 "l'écran", qui est une sorte d'application Terminal basée sur du texte. Les sessions d'écran peuvent être attachées et détachées, mais elles ne sont théoriquement destinées qu'à être utilisées par le même utilisateur, donc si vous voulez les partager entre les utilisateurs, c'est très pénible.