GNU/Linux >> Tutoriales Linux >  >> Linux

Proceso de Linux en segundo plano - ¿Se detuvo en los trabajos?

Por lo que puedo deducir.

Los trabajos en segundo plano no pueden leer el terminal del usuario. Cuando uno intente hacerlo, se suspenderá hasta que el usuario lo traiga al primer plano y proporcione alguna entrada. "leer desde la terminal del usuario" puede significar directamente intentar leer desde la terminal o cambiar la configuración de la terminal.

Normalmente, eso es lo que desea, pero a veces los programas leen desde la terminal y/o cambian la configuración de la terminal no porque necesiten la entrada del usuario para continuar, sino porque quieren verificar si el usuario está tratando de proporcionar información.

http://curiousthing.org/sigttin-sigttou-deep-dive-linux tiene detalles técnicos sangrientos.


En Linux y otros sistemas Unix, un trabajo que se ejecuta en segundo plano, pero aún tiene su stdin (o std::cin ) asociado con su terminal de control (también conocida como la ventana en la que se ejecutó) recibirá un SIGTTIN señal, que de forma predeterminada hace que el programa se detenga por completo, a la espera de que el usuario lo lleve al primer plano (fg %job o similar) para permitir que la entrada se dé realmente al programa. Para evitar que el programa se pause de esta manera, puede:

  1. Asegúrese de que los programas stdin el canal ya no está asociado con el terminal, ya sea redirigiéndolo a un archivo con contenido apropiado para que el programa lo ingrese, o a /dev/null si realmente no necesita entrada, p. myprogram < /dev/null & .
  2. Salga de la terminal después de iniciar el programa, lo que provocará la asociación con el stdin del programa para irme Pero esto causará un SIGHUP para ser entregado al programa (lo que significa que el canal de entrada/salida experimentó un "colgado"); esto normalmente hace que un programa finalice, pero esto se puede evitar usando nohup - p.ej. nohup myprogram & .

Si está interesado en capturar la salida del programa, esta es probablemente la mejor opción, ya que evita las dos señales anteriores (así como un par de otras) y guarda la salida para que la vea y determine si hay algún problema con la ejecución de los programas:

nohup myprogram < /dev/null > ${HOME}/myprogram.log 2>&1 &

Sí, realmente está detenido y ya no funciona en segundo plano. Para devolverlo a la vida, escriba fg número_trabajo


Linux
  1. Embárcate en una aventura en tu terminal Linux

  2. Cómo administrar trabajos en segundo plano de Linux con los comandos fg y bg

  3. Linux:cierre un programa con línea de comando (no lo elimine)

  4. El proceso que se ejecuta en segundo plano se eliminó en Linux

  5. Mantener un proceso de Linux en ejecución después de cerrar la sesión

Cómo matar un proceso o detener un programa en Linux

Cómo compilar C, C++ y Java usando Terminal en Linux

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

Linux Bash Scripting Part5 – Señales y trabajos

Cómo enviar procesos a segundo plano en Linux

¿Qué es un proceso detenido en Linux?