Presleme Csırasında Ctrlbasıldığında terminal emülatörü için keyrelease X11 olayı takiben bir tuş gönderir.
Bu olay (genellikle tuşa basıldığında), terminal öykünücüsü ^C
, sözde tty aygıtının ana tarafındaki dosya tanımlayıcısına 0x3 bayt ( ) yazar .
Eğer isig
termios cihazın ayarlanması ile ilgili olup olmadığını ve intr
bu ayar, bu 0x3 bayta ayarlanır, sonra çekirdek tüm üyelerine sigint sinyali gönderir ön işlem grubunda , terminal cihazı (Pty cihazında depolanan bir nitelik) arasında. Bu durumda, 0x3 baytı pty'nin slave tarafında okunamayacak.
setpgid()
Kabuk işleri için süreç grupları (ile ) oluşturan ve hangisinin ön plana ( tcsetpgrp()
pty cihazının bu niteliğini ayarlamak için) koyup koymayacağına karar veren etkileşimli kabuklardır .
Örneğin, etkileşimli bir kabuğun isteminde çalıştığınızda:
foo | bar
Kabuk, iki işlemle (yürüttüğü foo
ve bar
stdin / out'larını bir boru ile bağladıktan sonra) yeni bir işlem grubu başlatır ve bu grubu ön plana çıkarır. Ctrl-C tuşlarına basarsanız her iki işlem de SIGINT alır.
İçinde:
foo | bar &
Aynı ancak işlem grubu ön plana konmaz (ve kabuk da beklemez, böylece diğer komutları girebilirsiniz). Bu işlemler SIGINT'i Ctrl-C üzerine almaz ancak tty cihazından okumaya çalışırlarsa askıya alınabilir.
Daha fazla okuma: Her Pseudo-Terminal (PTY) bileşeninin (yazılım, ana taraf, ikincil taraf) sorumlulukları nelerdir?