Est-il possible d'attacher un terminal à un processus déjà en cours d'exécution en utilisant son PID d'une manière similaire à l'utilisation de la fg
commande pour les travaux?
Est-il possible d'attacher un terminal à un processus déjà en cours d'exécution en utilisant son PID d'une manière similaire à l'utilisation de la fg
commande pour les travaux?
Réponses:
Vous pouvez obtenir les descripteurs de fichiers standard de ce processus, par exemple stdout
:
tail -f /proc/<pid>/fd/1
# ls -la /proc/24510/fd/1 lrwx------ 1 root root 64 Oct 31 08:34 /proc/24510/fd/1 -> socket:[444026]
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 qui sont 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 ne sont théoriquement destinées qu'à ê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 de chaîne maximale à imprimer (la valeur par défaut est 32).-o filename
: Écrivez la sortie de trace dans le nom de fichier plutôt que sur écran (stderr).sudo
avec strace pour vous attacher à un processus et utiliser de -o ~/output.txt
sorte que le fichier soit laissé dans votre dossier de départ.
Vous pouvez utiliser les commandes ci-dessous pour attacher un processus en cours sur un autre terminal:
Exemple:
screen -S PID
retty $(pgrep PID)
reptyr PID
sudo apt-get install retty
mais il y a peu de limitations avec retty. Consultez la page de manuel mentionnée en réponse.