SIGTERM com um atalho de teclado

41

Eu sei que dentro de um terminal, Ctrl+ Catalho de teclado irá enviar um SIGINTsinal para o processo em primeiro plano. Existe uma maneira de configurar um atalho de teclado para enviar SIGTERMou mesmo SIGKILLpara o processo atual? Eu acho que poderia me economizar algum tempo.

Estou correndo Ubuntu 11.04

julkiewicz
fonte
Relevante: unix.stackexchange.com/q/362559/43390
Ioannis Filippidis

Respostas:

24

O stty é responsável por controlar isso, você já pode ter uma configuração. Você pode verificar fazendo:

$ 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      

As últimas linhas devem parecer familiares, ^ C = intr é a que você mencionou na sua pergunta. Você pode ler como definir mais informações através de:

$ man stty
polinomial
fonte
13
$ stty -eé BSD , para uso do Ubuntu $ stty -a, para ver:intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D;
dukedave 13/06
1
Estou interessado em ligar um sinal para o status, por isso estou pensando no pressionamento de tecla 'status', "ctrl- @". Isso é um sinal?
Andrew Wolfe
1
O atalho é ^\ enviado SIGQUIT.
Ioannis Filippidis
17

Eu sei que dentro de um terminal, Ctrl+ Catalho de teclado irá enviar um sinal SIGINT para o processo de primeiro plano atual.

Seu conhecimento está incorreto em dois pontos:

  1. O sinal é enviado ao grupo de processos em primeiro plano .
  2. É apenas CTRL+ Cse esse é o caractere especial que está configurado no momento. (Esse é o padrão na maioria dos sistemas modernos, mas, historicamente, poderia ter sido o DELpersonagem ou algo mais.)

Existe uma maneira de configurar um atalho de teclado para enviar o SIGTERM ou mesmo o SIGKILL para o processo atual?

Não. A disciplina de linha controla quais sinais são enviados e esses sinais são conectados. Eles são (em um padrão Unix) SIGHUP, SIGINT, SIGTTOU, SIGTTIN, SIGQUIT, e SIGTSTP. Não há outros gerados pela disciplina de linha.

JdeBP
fonte
13

O conjunto de sinais disponíveis para um tty é SIGINT( Ctrl+ C), SIGTSTP( Ctrl+ Z) e SIGQUIT( Ctrl+ \). Você pode atribuir caracteres diferentes a eles, mas esses são os únicos sinais disponíveis. Para seus propósitos, você pode usar Ctrl+ \para enviar SIGQUIT, embora ele atue como um erro e cause um dump principal por padrão. Você pode usar o sttycomando para ver e alterar as configurações.

Chris Page
fonte
1
Eu tive que pesquisar surpreendentemente por muito tempo para encontrar o atalho Ctrl + \ novamente. Muito obrigado! Isso é muito útil, pois ainda funciona quando o processo não está reagindo ao Ctrl + C.
luator