Pregunta

¿Cómo puedo adjuntar '' una consola / terminal de visión a una salida aplicaciones para que pueda ver lo que puede estar diciendo?

¿Cómo iba a desprenderse de una salida aplicaciones sin matar a la aplicación?

Normalmente, si el fuego de una aplicación hablador utilizando la línea de comandos se llega a ver todo tipo de maravillosa de la salida. Sin embargo, vamos a decir que tengo una ejecución de programación particularmente hablador, como Kino, y quiero ver su producción en un momento dado sin necesidad de reiniciar a través de la línea de comandos. No puedo; al menos yo no sé cómo.

¿Fue útil?

Solución

Hay algunas opciones aquí. Una de ellas es para redirigir la salida del comando a un archivo y, a continuación, utilizar 'cola' para ver las nuevas líneas que se agregan a ese archivo en tiempo real.

Otra opción es poner en marcha su programa dentro de la 'pantalla', que es una especie de aplicación Terminal basado en texto. sesiones de pantalla se pueden conectar y desconectar, pero son nominalmente destinados sólo para ser utilizado por el mismo usuario, así que si quieres compartirlos entre los usuarios, que es un gran dolor en el culo.

Otros consejos

Creo que tengo una solución más simple aquí. Sólo tiene que buscar un directorio cuyo nombre se corresponde con el PID que busca, bajo el pseudo sistema de archivos accesibles en la senda /proc. Así que si usted tiene un programa en ejecución, cuyo ID es 1199, cd en él:

$ cd /proc/1199

A continuación, busque el directorio fd debajo

$ cd fd

Este directorio fd contener el archivo de descriptores de objetos que su programa está utilizando (0: la entrada estándar, 1: salida estándar, 2: stderr) y justo tail -f el que necesita - en este caso, la salida estándar):

$ tail -f 1

que estaba buscando exactamente lo mismo y encontré que usted puede hacer:

strace -ewrite -p $PID

No es exactamente lo que necesitaba, pero es bastante estrecha.

He intentado redirigir la salida, pero que no funcionó para mí. Tal vez debido a que el proceso estaba escribiendo a una toma de corriente, no sé.

  

¿Cómo puedo adjuntar '' una   consola / terminal vista a una   salida de las aplicaciones para que pueda ver lo   que puede estar diciendo?

Sobre esta cuestión, ya sé que es posible coger la salida, incluso cuando no ha iniciado comando sceen antes de lanzar el processus.

Si bien no lo probé, me he encontrado un interesante artículo que explica cómo hacerlo usando GDB (y sin reiniciar el proceso).

redirigir-salida-de-a-corriendo-proceso

Básicamente:

  1. Compruebe la lista de archivos abiertos para su proceso, gracias a / proc / xxx / fd
  2. Adjuntar con su proceso de GDB
  3. A pesar de que está en pausa, cerrar el archivo que está interesado en, llamando a close () función (se puede cualquier función de su proceso de BGF. Sospecho que necesita símbolos de depuración en su proceso .. )
  4. Abra el archivo de una nueva llamada a la función create () o abierto (). (Tenga una mirada en los comentarios al final, podrás ver personas sugieren usar dup2 () para garantizar el mismo mango estará en uso)
  5. Separar el proceso y dejar en funcionamiento.

Por cierto, si está ejecutando un sistema operativo Linux en la caja de i386, los comentarios están hablando de una mejor herramienta para redirigir la salida a una nueva consola: 'retty' . Si es así, considere su uso.

Yo quería ver de forma remota un proceso de actualización de yum que había sido gestionado localmente, así que mientras había maneras probablemente más eficientes de hacer esto, esto es lo que hice:

watch cat /dev/vcsa1

Es evidente que usted querrá usar vcsa2, vcsa3, etc., dependiendo de lo que se estaba utilizando terminal.

Mientras mi ventana de terminal era de la misma anchura que el terminal que el comando se está ejecutando en, pude ver una instantánea de su salida de corriente cada dos segundos. El resto de opciones recomendadas en otro lugar que no funcionó particularmente bien para mi situación, pero que se resolvieron el problema.

Para mí, esto funcionó:

  1. Iniciar sesión como propietario del proceso (incluso el permiso es denegado root)

    ~$ su - process_owner
    
  2. Cola el descriptor de archivo como se ha mencionado en muchas otras respuestas.

    ~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top