Wenn wir sagen, dass ein Prozess ein steuerndes Terminal hat, meinen wir dann, dass der Prozess selbst ein steuerndes Terminal hat, oder ist es die Sitzung, zu der der Prozess gehört, die ein steuerndes Terminal hat?
Früher dachte ich, dass es die Sitzung ist, die ein steuerndes Terminal hat, aber dann habe ich Folgendes gelesen (von hier), was impliziert, dass es der Prozess ist, der ein steuerndes Terminal hat:
Eines der Attribute eines Prozesses ist sein steuerndes Terminal. Untergeordnete
Prozesse, die mit Fork erstellt wurden, erben das steuernde Terminal von
ihrem übergeordneten Prozess. Auf diese Weise erben alle Prozesse in einer Sitzung
das steuernde Terminal vom Sitzungsleiter. Ein Sitzungsleiter,
der die Kontrolle über ein Terminal hat, wird als kontrollierender
Prozess dieses Terminals bezeichnet.
Akzeptierte Antwort:
Es ist tatsächlich die Sitzung, die ein steuerndes Terminal hat
Die Einzelne UNIX-Spezifikation beschreibt die Beziehung in Bezug auf das steuernde Terminal „einer Sitzung zugeordnet“ sein. Wie weiter ausgeführt wird, hat ein steuerndes Terminal eine 1:1-Beziehung zu einer Sitzung. Es gibt „höchstens ein steuerndes Terminal“, das einer Sitzung zugeordnet ist, und „ein steuerndes Terminal ist genau einer Sitzung zugeordnet“.
Das FreeBSD Design und Implementierung book nähert sich dem etwas anders, erreicht aber denselben Punkt. Es ist nicht möglich, dass Prozesse, die dieselbe Sitzung teilen, unterschiedliche steuernde Terminals haben, noch ist es möglich, dass ein einzelnes Terminal das steuernde Terminal mehrerer Sitzungen ist.
Intern in FreeBSD funktionieren die Datenstrukturen tatsächlich so. Die Prozessstruktur hat einen Zeiger auf pgrp
Struktur, die die Prozessgruppe darstellt, zu der der Prozess gehört, die wiederum auf die session
zeigt -Struktur, die die Sitzung darstellt, zu der die Prozessgruppe gehört, die wiederum auf tty
zeigt Struktur des steuernden Terminals für die Sitzung.
Intern in Linux sind die Dinge etwas komplexer. Jede task_struct
hat eine Reihe von Zeigern auf pid
Strukturen für seine Prozessgruppen-ID und Sitzungs-ID; und hat einen weiteren Zeiger auf eine signal_struct
pro Prozess Struktur, die wiederum direkt auf das tty
zeigt Struktur des steuernden Terminals.
Weiterführende Literatur
- George V. Neville-Neil, Marshall Kirk McKusick und Robert N. M. Watson (2014-09-25). "Prozessmanagement". Das Design und die Implementierung des FreeBSD-Betriebssystems . Addison-Wesley Professional. ISBN 9780133761832.
- Donald Lewine (1991). „Terminal I/O“. POSIX-Programmierhandbuch . O’Reilly Media, Inc. ISBN 9780937175736.
- Daniel P. Bovet und Marco Cesati (2005). „Prozesse“. Den Linux-Kernel verstehen:Von E/A-Ports zum Prozessmanagement . 3. Auflage. O’Reilly Media, Inc. ISBN 9780596554910.
- „Definitionen“. Die Basisspezifikationen der Open Group . Ausgabe 7. 2016. IEEE 1003.1:2008.
- „Allgemeine Terminalschnittstelle“. Die Basisspezifikationen der Open Group . Ausgabe 7. 2016. IEEE 1003.1:2008.