GNU/Linux >> Tutoriels Linux >  >> Linux

Comment un processus peut-il intercepter stdout et stderr d'un autre processus sous Linux ?

Comme je ne suis pas autorisé à modifier la réponse de Jauco, je vais donner la réponse complète qui a fonctionné pour moi (la page de Russell repose sur un comportement non garanti qui, si vous fermez le descripteur de fichier 1 pour STDOUT, le prochain creat l'appel ouvrira FD 1.

Exécutez donc un simple script sans fin comme celui-ci :

import time

while True:
    print 'test'
    time.sleep(1)

Enregistrez-le dans test.py, exécutez avec

$ python test.py

Obtenir le PID :

$ ps auxw | grep test.py

Maintenant, joignez gdb :

$ gdb -p (pid)

et faites le fd magie :

(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1

Vous pouvez maintenant tail /tmp/stdout et voir la sortie qui allait à STDOUT.


Il existe plusieurs nouveaux utilitaires qui complètent la "méthode gdb" et ajoutent quelques touches supplémentaires. Celui que j'utilise maintenant s'appelle "reptyr" ("Re-PTY-er"). En plus de saisir STDERR/STDOUT, cela changera en fait le terminal de contrôle d'un processus (même s'il n'était pas auparavant attaché à un terminal).

La meilleure utilisation consiste à démarrer une session screen et à l'utiliser pour rattacher un processus en cours d'exécution au terminal dans screen afin que vous puissiez vous en détacher en toute sécurité et revenir plus tard.

Il est empaqueté sur des distributions populaires (Ex :'apt-get install reptyr').

http://onethingwell.org/post/2924103615/reptyr


Linux
  1. Comment trouver et tuer le processus Zombie sous Linux

  2. Comment rediriger la sortie vers un fichier et Stdout sous Linux

  3. Comment définir la priorité des processus Linux à l'aide des commandes nice et renice

  4. Comment installer et configurer Monit sur Linux pour la surveillance des processus

  5. Comment puis-je savoir sous Linux quel processus a envoyé un signal à mon processus

Comment tuer un processus sous Linux

Comment suspendre un processus et le reprendre plus tard sous Linux

Comment travailler avec le processus de premier plan et d'arrière-plan sous Linux

Comment trouver le PID et le PPID d'un processus sous Linux

Comment tuer les processus sous Linux en utilisant kill, killall et pkill

Comment suivre et tracer un processus Linux