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 envía 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, no se le permite a un proceso unirse a un grupo de procesos que sea miembro de otra sesión, es decir, no se le permite a un proceso 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 queda sujeta a la misma membresía de grupo de procesos (y, por lo tanto, de sesión) que la imagen anterior.
La distribución de señales a los grupos de procesos constituye la base del control de tareas empleado por los programas de shell . El controlador de dispositivo TTY incorpora una noción de un 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 de 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 en 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 en primer plano de su terminal controladora , determinando así qué procesos (y, por lo tanto, qué canalizaciones de comandos) pueden realizar E/S hacia y desde el terminal en un momento dado.ControlZControl\
Cuando el shell fork
es un nuevo proceso secundario para una secuencia de comandos, tanto el proceso principal como el secundario convierten inmediatamente al proceso secundario en el líder del grupo de procesos para la secuencia de comandos. De esta manera, se garantiza que el secundario sea el líder del grupo de procesos antes de que el principal o el secundario confíen en que así sea.
Cuando se utiliza una interfaz de usuario textual en un sistema tipo Unix, se utilizan sesiones 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 no hay un líder de sesión, se espera que los procesos del grupo de procesos en primer plano del terminal se encarguen de los bloqueos).
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 las que se utilizan con 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 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 necesitan necesariamente 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, donde el proceso se convierte en el líder del grupo de procesos del grupo recién creado. [5]
POSIX prohíbe la reutilización de un ID de proceso cuando todavía existe un grupo de procesos con ese identificador (es decir, cuando el líder de un grupo de procesos ha salido, pero todavía existen otros procesos en el grupo). De este modo, garantiza que los procesos no puedan convertirse accidentalmente en líderes de un grupo de procesos.
La llamada al sistemakill
es capaz de dirigir señales a procesos individuales o a grupos de procesos. [2]
Colección de procesos que permite la señalización de procesos relacionados.
Cada grupo de procesos es miembro de una sesión.