GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puede un proceso interceptar stdout y stderr de otro proceso en Linux?

Como no tengo permitido editar la respuesta de Jauco, daré la respuesta completa que funcionó para mí (la página de Russell se basa en un comportamiento no garantizado de que, si cierra el descriptor de archivo 1 para STDOUT, el siguiente creat la llamada abrirá FD 1.

Por lo tanto, ejecute un script sin fin simple como este:

import time

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

Guárdelo en test.py, ejecútelo con

$ python test.py

Obtener el PID:

$ ps auxw | grep test.py

Ahora, adjunte gdb :

$ gdb -p (pid)

y haz el fd magia:

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

Ahora puedes tail /tmp/stdout y ver la salida que solía ir a STDOUT.


Hay varias utilidades nuevas que completan el "método gdb" y agregan algunos toques adicionales. El que uso ahora se llama "reptyr" ("Re-PTY-er"). Además de tomar STDERR/STDOUT, en realidad cambiará el terminal de control de un proceso (incluso si no estaba previamente conectado a un terminal).

El mejor uso de esto es iniciar una sesión de pantalla y usarla para volver a adjuntar un proceso en ejecución al terminal dentro de la pantalla para que pueda desconectarse de él de manera segura y volver más tarde.

Está empaquetado en distribuciones populares (Ej:'apt-get install reptyr').

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


Linux
  1. Cómo iniciar el comando de Linux en segundo plano y separar el proceso en la terminal

  2. Cómo copiar permisos y propiedad de archivos a otro archivo en Linux

  3. Cómo redirigir la salida a un archivo y salida estándar en Linux

  4. ¿Qué tan portátiles son /dev/stdin, /dev/stdout y /dev/stderr?

  5. ¿Cómo puedo saber en Linux qué proceso envió una señal a mi proceso?

Cómo matar un proceso en Linux

Cómo suspender un proceso y reanudarlo más tarde en Linux

Cómo trabajar con procesos en primer plano y en segundo plano en Linux

Cómo encontrar el PID y PPID de un proceso en Linux

Cómo matar procesos en Linux usando kill, killall y pkill

Cómo rastrear y rastrear un proceso de Linux