Durch Drücken von, Cwährend Ctrlgedrückt wird, wird ein Tastendruck gefolgt von einem Tastenfreigabe-X11-Ereignis an den Terminalemulator gesendet.
Bei diesem Ereignis (im Allgemeinen bei einem Tastendruck) schreibt der Terminal-Emulator das 0x3-Byte ( ^C
) in seinen Dateideskriptor auf der Masterseite des Pseudotty-Geräts.
Wenn die isig
Termios-Einstellung des Geräts aktiviert und die intr
Einstellung auf dieses 0x3-Byte festgelegt ist, sendet der Kernel das SIGINT-Signal an alle Mitglieder der Vordergrundprozessgruppe des Endgeräts (ein weiteres im pty-Gerät gespeichertes Attribut). In diesem Fall steht das 0x3-Byte auf der Slave-Seite des Pty nicht zum Lesen zur Verfügung.
Normalerweise sind es interaktive Shells, die Prozessgruppen (mit setpgid()
) für Shell-Jobs erstellen und entscheiden, welche in den Vordergrund gestellt werden sollen (mit tcsetpgrp()
, um das Attribut des Pty-Geräts festzulegen) oder nicht.
Zum Beispiel, wenn Sie an der Eingabeaufforderung einer interaktiven Shell ausgeführt werden:
foo | bar
Die Shell startet eine neue Prozessgruppe mit zwei Prozessen (in denen sie ausgeführt wird foo
und bar
nachdem sie ihr stdin / out mit einer Pipe verbunden hat) und stellt diese Gruppe in den Vordergrund. Beide Prozesse würden den SIGINT erhalten, wenn Sie Strg-C drücken.
Im:
foo | bar &
Gleich, aber die Prozessgruppe wird nicht in den Vordergrund gestellt (und die Shell wartet auch nicht darauf, sodass Sie andere Befehle eingeben können). Diese Prozesse würden den SIGINT nicht bei Strg-C erhalten, sondern könnten angehalten werden, wenn sie versuchen, vom tty-Gerät zu lesen.
Weitere Informationen finden Sie unter: Welche Aufgaben hat jede Pseudo-Terminal-Komponente (Software, Master-Seite, Slave-Seite)?