Cuando decimos que un proceso tiene una terminal de control, ¿queremos decir que el proceso mismo tiene una terminal de control, o es la sesión a la que pertenece el proceso la que tiene una terminal de control?
Solía pensar que es la sesión la que tiene un terminal de control, pero luego he leído lo siguiente (de aquí) que implica que es el proceso el que tiene un terminal de control:
Uno de los atributos de un proceso es su terminal de control. Los procesos secundarios
creados con bifurcación heredan el terminal de control de
su proceso principal. De esta forma, todos los procesos de una sesión
heredan el terminal de control del líder de la sesión. Un líder de sesión
que tiene el control de un terminal se denomina proceso de control
de ese terminal.
Respuesta aceptada:
De hecho, es la sesión la que tiene un terminal de control
La Especificación UNIX única describe la relación en términos del terminal de control estar “asociado a una sesión”. Como continúa especificando, una terminal de control tiene una relación 1:1 con una sesión. Hay "como máximo un terminal de control" asociado con una sesión, y "un terminal de control está asociado con exactamente una sesión".
El diseño e implementación de FreeBSD El libro aborda esto de manera ligeramente diferente, pero llega al mismo lugar. No es posible que los procesos que comparten la misma sesión tengan diferentes terminales de control, ni que un único terminal sea el terminal de control de varias sesiones.
Internamente en FreeBSD, así es como funcionan realmente las estructuras de datos. La estructura del proceso tiene un puntero al pgrp
estructura que representa el grupo de procesos al que pertenece el proceso, que a su vez apunta a la session
estructura que representa la sesión a la que pertenece el grupo de procesos, que a su vez apunta al tty
estructura del terminal de control de la sesión.
Internamente en Linux, las cosas son un poco más complejas. Cada task_struct
tiene un conjunto de punteros a pid
estructuras para su ID de grupo de procesos e ID de sesión; y tiene otro puntero a un signal_struct
por proceso estructura que a su vez apunta directamente al tty
estructura del terminal de control.
Lecturas adicionales
- George V. Neville-Neil, Marshall Kirk McKusick y Robert N. M. Watson (2014-09-25). "Gestión de proceso". El diseño e implementación del sistema operativo FreeBSD . Addison Wesley Professional. ISBN 9780133761832.
- Donald Lewine (1991). “Terminal E/S”. Guía para programadores de POSIX . O'Reilly Media, Inc. ISBN 9780937175736.
- Daniel P. Bovet y Marco Cesati (2005). “Procesos”. Comprender el kernel de Linux:desde los puertos de E/S hasta la gestión de procesos . 3ra edición. O'Reilly Media, Inc. ISBN 9780596554910.
- “Definiciones”. Especificaciones básicas de Open Group . Edición 7. 2016. IEEE 1003.1:2008.
- “Interfaz de terminal general”. Especificaciones básicas de Open Group . Edición 7. 2016. IEEE 1003.1:2008.