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 permite que un proceso se una a un grupo de procesos que sea miembro de otra sesión, es decir, no se permite que un proceso migre 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 pertenencia al grupo de procesos (y por lo tanto a la sesión) que la imagen anterior.
Aplicaciones
La distribución de señales a los grupos de procesos constituye la base del control de trabajo 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 terminal", Control+ Z) y SIGQUIT ("salir", Control+ \). 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 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.
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 asegura que el niño sea el líder del grupo de proceso antes de que el padre o el niño confíe en que este sea el caso.
Cuando se utiliza una interfaz de usuario textual en un sistema similar a Unix, las sesiones se utilizan para implementar sesiones de inicio de sesión . Un solo proceso, el líder de la 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 en primer plano de la terminal manejen 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 kernel se ignora en gran medida. Las interfaces gráficas de usuario, como cuando se emplea el administrador de pantalla X , utilizan un mecanismo diferente para implementar sesiones de inicio de sesión.
Detalles
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 como 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 de proceso 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 de grupo de procesos del líder de la sesión. POSIX prohíbe el cambio del ID de grupo de procesos de un líder de sesión.
La llamada al sistema setpgid
se utiliza para establecer el ID de 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 con el proceso convirtiéndose 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 todavía existen otros procesos en el grupo). Por lo tanto, garantiza que los procesos no se conviertan accidentalmente en líderes de grupos de procesos.
La llamada al sistemakill
es capaz de dirigir señales a procesos individuales o a grupos de procesos. [2]
Ver también
Referencias
- Especificación única de UNIX , edición 6
- ^ IEEE y The Open Group (2018). "3. Definiciones" . The Open Group Base Especificaciones Edición 7 . § 296 . Consultado el 30 de agosto de 2020 .
Un conjunto de procesos que permite la señalización de procesos relacionados.
- ^ a b especificación única de UNIX , número 7 de The Open Group - Referencia de interfaces del sistema, la
- ^ IEEE y The Open Group (2018). "3. Definiciones" . The Open Group Base Especificaciones Edición 7 . § 343 . Consultado el 30 de agosto de 2020 .
Una colección de grupos de procesos […]. Cada grupo de procesos es miembro de una sesión.
- ^ - Referencia de interfaces del sistema, la especificación única de UNIX , número 7 de The Open Group
- ^ - Referencia de interfaces del sistema, la especificación única de UNIX , número 7 de The Open Group
Otras lecturas
- McKusick, Marshall Kirk; Neville-Neil, George V. (2 de agosto de 2004). "Gestión de Procesos FreeBSD: Grupos de Procesos y Sesiones" . El diseño e implementación del sistema operativo FreeBSD . Addison Wesley. ISBN 0-201-70245-2.
- Señales UNIX y grupos de procesos