Terminal tarafından üretilen sinyallerin listesi (örneğin, Ctrl-C -> SIGINT)


30

Linux'ta sinyalleri gönderen klavye kombinasyonlarının tam listesini nereden bulabilirim?

Örneğin:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- SIGQUIT

2
"Klavye" herhangi bir sinyal göndermez, satır disiplini gönderir. Bir çizgi disiplininin ne olduğunu bulun, sonra okuyun man 1 stty.
Satō Katsura

@SatoKatsura Çizgi disiplini bir tür klavye sürücüsüdür.
Gilles 'SO- kötülük'

@Gilles Gerçekten değil. Klavye sürücüsü, tarama kodları ve benzerleriyle ilgilidir. Hat disiplin modem hatları, USB-seri adaptörler, HID cihazlar, vb gibi diğer birçok şeye uygulamayı bir birleşik görünüm sağlar üst düzey tutkal bir çeşit
Satō Katsura

@SatoKatsura Uygulamanın ve klavyenin altında oturan işletim sisteminin bir parçasıdır. Başka bir deyişle, bu klavye sürücüsünün bir parçası. Bir donanım terminaliyle (vt100 gibi), bilgisayar tarafından terminalin aksine yapılan klavye girişinin tek dönüşümüdür.
Gilles 'SO- kötülük'

Yanıtlar:


27

Linux N_TTY çizgi disiplini sadece üç farklı sinyal gönderir: SIGINT, SIGQUIT ve SIGTSTP. Varsayılan olarak aşağıdaki kontrol karakterleri sinyalleri üretir:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- SIGQUIT
  • Ctrl+ Z- SIGTSTP

Hmm, peki ya Ctrl-S ve Ctrl-Q? Bunun için bir referansınız var mı?
Tom Hale

6
Ctrl-S veya Ctrl-Q tuşlarına bastığınızda hiçbir sinyal karışmaz. Sadece karakter akışını kısarak, tüketen sürece ulaşmalarını engelliyorlar. Sonunda, tamponlar dolduğunda, üretim süreci Ctrl-Q akışını engelleyene kadar yazma sistemi çağrısında engelleyecektir. Çağrının yazma işleminin Ctrl-S olmadan bile engellenebileceğinin normal olduğuna dikkat edin: eğer alım işlemi kendisine gönderilen verileri tüketmek için yavaşsa, örneğin, zaman işlemlerinin çoğunu yeni verileri okumak yerine zaten alınan verileri harcamaktadır. .
Johan Myréen

1
man stty | grep -C1 signalbu üç için bir kaynak, terminal tarafından üretilen tek sinyaldir.
Tom Hale

@ TomHale ... "Modem kontrol sinyalleri" hariç elektrik sinyalleridir. :) Gerçekten, SIGINT, SIGQUITve SIGTSTPsadece "olağan" sinyalleri hat disiplin ile gönderilir. BSD'de ayrıca gibi şeyler var SIGINFO, ama bu standart değil.
Satō Katsura

8

sttySinyal üreten karakterleri kontrol etmek veya değiştirmek için kullanabilirsiniz .

$ stty -a | grep -Ewoe '(intr|quit|susp) = [^;]+'
intr = ^C
quit = ^\
susp = ^Z

intr(kesme) üretir SIGINT, quitüretir SIGQUIT, susp(askıya alır) üretir SIGTSTP. stty -aayrıca sinyal göndermeyen ancak terminal katmanını etkileyebilecek olan start = ^Q; stop = ^S;ve erase = ^?(geri al) gibi şeyleri de gösterecektir .

Düz stty, varsayılan olmayan ayarları gösterir ve örneğin stty intr ^Qkesme karakterini ^Qbunun yerine değiştirir ^C.

Sanırım ^L(form beslemesi, yeni sayfa) bir terminal özelliği değil, aynı zamanda pencere boyutunu yeniden kontrol ederek görünümün yeniden çizilmesini istemek için uygulamalar tarafından sıkça kullanılan bir karakter.


1
^Lfarklı uygulamalar için farklı bir anlamı vardır. Çoğunda cursestabanlı uygulama (örneğin vim, less, mutt, mc, vs.), ancak (kabukları, tam bir yeniden düzenleme (bu nedenle tekrar kontrol pencere boyutu) zorlar bashvs.) sadece ekranı temizler. Dahil olan yok SIGWINCH.
Satō Katsura
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.