GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué sucede con la salida de un proceso que ha sido repudiado y ha perdido su terminal?

Si cierro el terminal virtual, donde se inició algún proceso, ¿la salida va directamente a /dev/null? , o puede contaminar la memoria de alguna manera?
¿Puedo tomar el resultado para continuar leyéndolo en cualquier momento después de eso?

[EDITAR]:Entonces, ¿es el momento de repudiar un proceso efectivamente el final de mi poder para controlar su salida?

También noté que si desconozco un proceso detenido, al principio todo parece normal:no se termina ni se muestra en los trabajos. Pero si me desconecto (y no significa cerrar la terminal, simplemente salir de su , por ejemplo), el proceso se termina. De todos modos, un proceso repudiado que se ejecuta en segundo plano puede seguir ejecutándose.

Respuesta aceptada:

El hecho de que un proceso sea "rechazado" solo tiene un significado para el shell interactivo que creó este proceso. Significa que el shell no incluye (más) el proceso en su tabla de trabajos, y que SIGHUP no se enviará a este proceso cuando finalice el shell. No está realmente relacionado con sus preguntas.

Acerca de lo que sucede con las salidas que se envían a un terminal virtual eliminado:yo mismo hice algunas pruebas y noté que /dev/pts/x los dispositivos no son accesibles y no se volverán a asignar hasta que se hayan cerrado todos los descriptores de archivos que apuntan a ellos. Por lo tanto, no puedo ver una razón por la que se almacenen las escrituras en un terminal eliminado. Supongo que esto ni siquiera está definido por POSIX.

Acerca de capturar la salida de algún proceso que escribe en una terminal, no creo que sea posible, incluso cuando la terminal todavía está viva¹. Todo lo que puede hacer es capturar la entrada directa a la terminal (es decir, pulsaciones de teclas o pulsaciones de teclas simuladas por la parte maestra de un pty). Si los procesos leyeran en la entrada estándar lo que está escrito en sus terminales, eso conduciría a un bucle de auto-e/s para la mayoría de los procesos.

Acerca de la última observación sobre la finalización del proceso, realmente no sé qué está sucediendo, pero sospecho comportamientos bastante extraños con señales (SIGTTOU, SIGTTIN, SIGHUP u otras) relacionadas con el estado de primer plano/fondo de los grupos de procesos, cuando la sesión salidas de líder (por ejemplo, su , en el caso que mencionaste).

Respuesta a la Editar: No, con respecto a la salida, nada cambia cuando se desautoriza un proceso:todavía está conectado a su terminal de control (a menos que ya se haya desconectado como lo hacen los demonios). Puedes ver eso usando ps . Sin embargo, no podrá usar fg /bg /jobs comandos proporcionados por el shell más para este proceso. Eso significa que puede ser difícil alimentarlo con la entrada del terminal (requiere estar en el grupo de procesos de primer plano).

Relacionado:¿Eliminar los caracteres de control (incluidos los códigos / colores de la consola) de la salida del script?



Linux
  1. ¿La salida del comando `tty` y el archivo `/dev/tty` se refieren ambos a la terminal de control del proceso Bash actual?

  2. ¿Qué significa en la salida de Ps?

  3. ¿Cuál es la diferencia de redirigir una salida usando >, &>, >&y 2&>?

  4. ¿Qué sucede cuando un hilo se bifurca?

  5. ¿Cuál es la diferencia entre ls y l?

SIGTERM vs SIGKILL:¿Cuál es la diferencia?

¿Cuál es la definición de una sesión en Linux?

¿Cuál es la diferencia entre Kernel no preventivo, preventivo y selectivo?

¿Cuál es la diferencia entre las cadenas OUTPUT y FORWARD en iptables?

Cómo limitar los recursos totales (memoria) de un proceso y sus hijos

¿Cuál es la diferencia entre kill, pkill y killall?