En un sistema operativo compatible con POSIX , un grupo de procesos denota una colección de uno o más procesos . [1] Entre otras cosas, un grupo de procesos se utiliza para controlar la distribución de una señal ; cuando una señal se dirige a un grupo de procesos, la señal se entrega a cada proceso que es miembro del grupo. [2]
De manera similar, una sesión denota una colección de uno o más grupos de procesos. [3] Un proceso no puede crear un grupo de procesos que pertenezca a otra sesión; además, a un proceso no se le permite unirse a un grupo de procesos que sea miembro de otra sesión; es decir, a un proceso no se le permite migrar de una sesión a otra.
Cuando un proceso reemplaza su imagen con una nueva imagen (llamando a una de las exec
funciones ), la nueva imagen está sujeta a la misma membresía de grupo de proceso (y por lo tanto de sesión) que la imagen anterior.
La distribución de señales a grupos de procesos forma la base del control de trabajo empleado por los programas shell . El controlador de dispositivo TTY incorpora una noción de grupo de procesos en primer plano , al que envía señales generadas por interrupciones del teclado , en particular SIGINT ("interrupción", Control+ C), SIGTSTP ("parada terminal", + ) y SIGQUIT ("salir", + ). También envía las señales SIGTTIN y SIGTTOU a cualquier proceso que intente leer o escribir en el terminal y que no esté en el grupo de procesos de primer plano. El shell, a su vez, divide las canalizaciones de comandos que crea en grupos de procesos y controla qué grupo de procesos es el grupo de procesos de primer plano de su terminal de control , determinando así qué procesos (y por lo tanto qué canalizaciones de comandos) pueden realizar E/S y desde la terminal en cualquier momento.ControlZControl\
Cuando el shell fork
es un nuevo proceso hijo para una canalización de comandos, tanto el proceso de shell padre como el proceso hijo convierten inmediatamente al proceso hijo en el líder del grupo de procesos para la canalización de comandos. De esta manera, se garantiza que el niño sea el líder del grupo de proceso antes de que el padre o el niño confíen en que así sea.
Cuando se utiliza una interfaz de usuario textual en un sistema tipo Unix, las sesiones se utilizan para implementar sesiones de inicio de sesión . Un único proceso, el líder de sesión , interactúa con el terminal de control para garantizar que todos los programas finalicen cuando un usuario "cuelga" la conexión del terminal. (Cuando un líder de sesión está ausente, se espera que los procesos en el grupo de procesos de primer plano de la terminal manejen los cuelgues).
Cuando se utiliza una interfaz gráfica de usuario , el concepto de sesión se pierde en gran medida y la noción de sesiones del núcleo se ignora en gran medida. Las interfaces gráficas de usuario, como donde se emplea el administrador de pantalla X , utilizan un mecanismo diferente para implementar sesiones de inicio de sesión.
La llamada al sistema setsid
se utiliza para crear una nueva sesión que contiene un único (nuevo) grupo de procesos, con el proceso actual como líder de la sesión y líder del grupo de procesos de ese único grupo de procesos. [4]
Los grupos de procesos se identifican mediante un número entero positivo, el ID del grupo de procesos , que es el identificador del proceso que es (o fue) el líder del grupo de procesos. Los grupos de procesos no necesariamente tienen que tener líderes, aunque siempre comienzan con uno. Las sesiones se identifican mediante el ID del grupo de procesos del líder de la sesión. POSIX prohíbe el cambio del ID del grupo de procesos de un líder de sesión.
La llamada al sistema setpgid
se utiliza para establecer el ID del grupo de procesos de un proceso, uniendo así el proceso a un grupo de procesos existente o creando un nuevo grupo de procesos dentro de la sesión del proceso y el proceso se convierte en el líder del grupo de procesos del recién creado. grupo. [5]
POSIX prohíbe la reutilización de un ID de proceso donde todavía existe un grupo de procesos con ese identificador (es decir, donde el líder de un grupo de procesos ha salido, pero aún existen otros procesos en el grupo). De este modo se garantiza que los procesos no se conviertan accidentalmente en líderes de grupo de procesos.
La llamada al sistemakill
es capaz de dirigir señales a procesos individuales o a grupos de procesos. [2]
Conjunto de procesos que permite la señalización de procesos relacionados.
Una colección de grupos de procesos [...]. Cada grupo de procesos es miembro de una sesión.