Menekan Csambil Ctrlditekan mengirimkan penekanan tombol diikuti oleh peristiwa rilis X11 ke emulator terminal.
Setelah peristiwa itu (umumnya yang menekan tombol), terminal emulator menulis byte 0x3 ( ^C
) ke deskriptor file di sisi master perangkat pseudo-tty.
Jika isig
pengaturan termios perangkat aktif dan jika intr
pengaturan diatur ke 0x3 byte itu, maka kernel mengirimkan sinyal SIGINT ke semua anggota kelompok proses latar depan perangkat terminal (atribut lain yang disimpan dalam perangkat pty). Dalam hal ini, byte 0x3 tidak akan tersedia untuk dibaca di sisi slave pty.
Biasanya shell interaktif yang membuat grup proses (dengan setpgid()
) untuk pekerjaan shell, dan memutuskan yang mana yang akan diletakkan di latar depan (dengan tcsetpgrp()
mengatur atribut perangkat pty itu) atau tidak.
Misalnya ketika Anda menjalankan prompt shell interaktif:
foo | bar
Shell memulai grup proses baru dengan dua proses (di mana ia mengeksekusi foo
dan bar
setelah menghubungkan stdin / out dengan pipa) dan menempatkan grup itu di latar depan. Kedua proses akan menerima SIGINT jika Anda menekan Ctrl-C.
Di:
foo | bar &
Sama tetapi grup proses tidak diletakkan di latar depan (dan shell juga tidak menunggu sehingga Anda dapat memasukkan perintah lain). Proses-proses itu tidak akan mendapatkan SIGINT pada Ctrl-C tetapi dapat ditangguhkan jika mereka mencoba membaca dari perangkat tty.
Lebih banyak membaca di: Apa tanggung jawab masing-masing komponen Pseudo-Terminal (PTY) (perangkat lunak, sisi master, sisi budak)?