SIGTERM ze skrótem klawiaturowym

41

Wiem, że wewnątrz terminala Ctrl+ Cskrót klawiaturowy wyśle SIGINTsygnał do bieżącego procesu pierwszego planu. Czy istnieje sposób skonfigurowania skrótu klawiaturowego do wysyłania SIGTERMlub nawet SIGKILLdo bieżącego procesu? Myślę, że może mi to zaoszczędzić trochę czasu.

biegnę Ubuntu 11.04

julkiewicz
źródło
Odpowiedni: unix.stackexchange.com/q/362559/43390
Ioannis Filippidis

Odpowiedzi:

24

stty jest odpowiedzialny za kontrolowanie tego, możesz mieć już jedną konfigurację. Możesz to sprawdzić, wykonując:

$ stty -e
speed 38400 baud; 53 rows; 225 columns;
lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl
        -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
        -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff -ixany imaxbel -iutf8
        -ignbrk brkint -inpck ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd -hupcl -clocal -cstopb -crtscts
        -dsrflow -dtrflow -mdmbuf
discard dsusp   eof     eol     eol2    erase   intr    kill    lnext   
^O      ^Y      ^D      <undef> <undef> ^?      ^C      ^U      ^V      
min     quit    reprint start   status  stop    susp    time    werase  
1       ^\      ^R      ^Q      ^@      ^S      ^Z      0       ^W      

Ostatnie kilka wierszy powinno wyglądać znajomo, ^ C = intr to ten, o którym wspomniałeś w swoim pytaniu. Możesz przeczytać, jak ustawić więcej za pomocą:

$ man stty
wielomian
źródło
13
$ stty -ejest BSD , do użytku Ubuntu $ stty -a, aby zobaczyć:intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D;
dukedave
1
Interesuje mnie wyłapanie sygnału statusu, więc zastanawiam się nad naciśnięciem klawisza „status”, „ctrl- @”. Czy to sygnał?
Andrew Wolfe,
1
Skrót zostanie ^\ wysłany SIGQUIT.
Ioannis Filippidis
17

Wiem, że wewnątrz terminala Ctrl+ Cskrót klawiaturowy wyśle ​​sygnał SIGINT do bieżącego procesu pierwszego planu.

Twoja wiedza jest nieprawidłowa w dwóch punktach:

  1. Sygnał jest wysyłany do grupy procesów pierwszego planu .
  2. Tylko CTRL+, Cjeśli jest to specjalny znak, który jest konfigurowany w tym czasie. (Jest to domyślne w większości nowoczesnych systemów, ale historycznie mogła to być DELpostać lub coś innego.)

Czy istnieje sposób skonfigurowania skrótu klawiaturowego do wysyłania SIGTERM lub nawet SIGKILL do bieżącego procesu?

Nie. Dyscyplina liniowa kontroluje, jakie sygnały są wysyłane, a te sygnały są przewodowe. Są to (w standardzie Unix) SIGHUP, SIGINT, SIGTTOU, SIGTTIN, SIGQUIT, i SIGTSTP. Nie ma innych generowanych przez dyscyplinę liniową.

JdeBP
źródło
13

Zestaw dostępnych sygnałów dla tty to SIGINT( Ctrl+ C), SIGTSTP( Ctrl+ Z) i SIGQUIT( Ctrl+ \). Możesz przypisać do nich różne znaki, ale są to jedyne dostępne sygnały. Do swoich celów możesz użyć Ctrl+, \aby wysłać SIGQUIT, chociaż działa to jak błąd i domyślnie powoduje zrzut pamięci. Możesz użyć sttypolecenia, aby zobaczyć i zmienić ustawienia.

Chris Page
źródło
1
Musiałem szukać zaskakująco długo, aby ponownie znaleźć skrót Ctrl + \. Wielkie dzięki! Jest to bardzo przydatne, ponieważ nadal działa, gdy proces nie reaguje na Ctrl + C.
luator