¿Uso y significado de sesión y grupo de procesos en Unix?

83

Los procesos Unix tienen una identificación de sesión y son parte de un grupo de procesos, que se puede cambiar / consultar con funciones como setsid () / getpgrp ().

Sin embargo, el concepto de un grupo de procesos y una sesión siempre me eludió, ¿alguien podría explicar qué importancia tienen las distintas sesiones y grupos de procesos? ¿Por qué / cuándo se quiere crear una nueva sesión o colocar varios procesos en la misma sesión y / o grupo de procesos? ?

Habalusa
fuente

Respuestas:

104

Un grupo de procesos es una colección de procesos relacionados que se pueden señalar a la vez.

Una sesión es una colección de grupos de procesos, que están conectados a un único dispositivo terminal (conocido como terminal de control ) o no están conectados a ningún terminal.

Las sesiones se utilizan para el control de trabajos: uno de los grupos de procesos de la sesión es el grupo de procesos en primer plano, y los caracteres de control de terminales pueden enviar señales. Puede pensar en una sesión con un terminal de control como correspondiente a un "inicio de sesión" en ese terminal. (Los demonios normalmente se desvinculan de cualquier terminal de control creando una nueva sesión sin una).

por ejemplo, si se ejecuta some_appdesde el shell, el shell crea un nuevo grupo de procesos para él y lo convierte en el grupo de procesos de primer plano de la sesión. ( some_apppuede crear algunos procesos secundarios; de forma predeterminada, serán parte del mismo grupo de procesos). Si luego presiona ^Z, se indicará al some_appgrupo de procesos que lo detenga; y el grupo de procesos del shell se cambia para volver a ser el grupo de procesos en primer plano. Entonces, por ejemplo bg %1, iniciaría some_appel grupo de procesos de nuevo, pero lo mantendría ejecutándose en segundo plano.


El estándar POSIX.1-2008 es bastante legible (al menos, ¡creo que sí!). Mire las definiciones y las secciones relevantes del capítulo "Interfaz de terminal general" .

Matthew Slattery
fuente
3
Esa es una muy, muy buena explicación con información adicional que podría haber aparecido como preguntas más tarde
GP92
@MatthewSlattery son terminaly se terminal devicemencionan en el documento lo mismo?
alhelal
12

Los shells de control de trabajos manipulan sesiones o grupos de procesos todo el tiempo. Puede enviar la misma señal a todos los procesos en un grupo de procesos con una sola llamada a la kill()función POSIX .

El estándar POSIX dice:

Si pid es mayor que 0, se enviará sig al proceso cuyo ID de proceso sea igual a pid.

Si pid es 0, se enviará sig a todos los procesos (excluyendo un conjunto no especificado de procesos del sistema) cuyo ID de grupo de procesos sea igual al ID de grupo de procesos del remitente, y para los cuales el proceso tiene permiso para enviar una señal.

Si pid es -1, se enviará sig a todos los procesos (excluyendo un conjunto no especificado de procesos del sistema) para los cuales el proceso tiene permiso para enviar esa señal.

Si pid es negativo, pero no -1, se enviará sig a todos los procesos (excluyendo un conjunto no especificado de procesos del sistema) cuyo ID de grupo de procesos sea igual al valor absoluto de pid, y para los cuales el proceso tenga permiso para enviar una señal. .

Cuando sale un shell de inicio de sesión, por ejemplo, se envía una señal SIGHUP a todos los programas de su grupo de procesos.

Cuando manipula programas en primer plano o en segundo plano, está utilizando grupos de procesos.

También hay terminales de control de las que preocuparse; las señales generadas por un terminal de control pueden enviarse a todos los programas de un grupo de procesos.

Jonathan Leffler
fuente