Naciśnięcie, Cgdy Ctrljest naciśnięty, wysyła naciśnięcie klawisza, a następnie zdarzenie X11 wydania klucza do emulatora terminala.
Po tym zdarzeniu (zwykle naciśnięcie klawisza) emulator terminala zapisuje bajt 0x3 ( ^C
) do swojego deskryptora pliku po stronie master urządzenia pseudo-tty.
Jeśli isig
ustawienie termios urządzenia jest włączone, a intr
ustawienie to bajt 0x3, wówczas jądro wysyła sygnał SIGINT do wszystkich członków pierwszoplanowej grupy procesów urządzenia końcowego (inny atrybut przechowywany w urządzeniu pty). W takim przypadku bajt 0x3 nie będzie dostępny do odczytu po stronie slave pty.
Zwykle są to interaktywne powłoki, które tworzą grupy procesów (z setpgid()
) dla zadań powłoki i decydują, który z nich umieścić na pierwszym planie (z, tcsetpgrp()
aby ustawić ten atrybut urządzenia pty), czy nie.
Na przykład, gdy uruchamiasz się po znaku zachęty interaktywnej powłoki:
foo | bar
Powłoka uruchamia nowe grupy procesów z dwoma procesami (w których wykonuje się foo
i bar
po podłączeniu stdin / out za pomocą potoku) i umieszcza tę grupę na pierwszym planie. Oba procesy otrzymałyby SIGINT, jeśli naciśniesz Ctrl-C.
W:
foo | bar &
To samo, ale grupa procesów nie jest umieszczana na pierwszym planie (a powłoka również nie czeka na nią, aby można było wprowadzić inne polecenia). Te procesy nie otrzymałyby SIGINT po Ctrl-C, ale mogłyby zostać zawieszone, gdyby próbowały czytać z urządzenia tty.
Więcej informacji na: Jakie są obowiązki każdego komponentu Pseudo-Terminal (PTY) (oprogramowanie, strona master, strona slave)?