web-dev-qa-db-fra.com

Est-il possible de lire la sortie de n'importe quel processus en utilisant son PID?

Est-il possible d'associer un terminal à un processus en cours d'exécution en utilisant son PID de la même manière que la commande fg pour les travaux?

29
Tommy

Vous pouvez obtenir les descripteurs de fichier standard de ce processus, par exemple. stdoutname__:

tail -f /proc/<pid>/fd/1
41
user23368

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 dans screen, qui est une sorte d'application de terminal textuelle. Les sessions écran peuvent être attachées et détachées, mais sont nominalement destinées à être utilisées par le même utilisateur, donc si vous souhaitez les partager entre utilisateurs.

Sinon, si vous le souhaitez, vous pouvez suivre le processus et voir ce qu'il fait avec strace:

strace -e trace=open -p 22254 -s 80 -o output.txt
  • -p PID: attachez-vous au processus avec l'ID de processus PID et commencez le traçage.
  • -s SIZE: spécifiez la taille maximale de la chaîne à imprimer (la valeur par défaut est 32).
  • -o filename: Ecrit la sortie de trace dans le fichier filename plutôt que dans screen (stderr).
8
user61928

Vous pouvez utiliser les commandes ci-dessous pour attacher un processus en cours sur un autre terminal:

  • retty(Page de manuel: retty )
  • reptyrname__
  • screenname__

Exemple:

screen -S PID
retty $(pgrep PID)
reptyr PID
3
devav2