Sinal - Comando Linux / Unix
Linux suporta tanto sinais confiáveis POSIX (doravante, "sinais padrão") e sinais em tempo real POSIX.
Usando sinais no Linux
Os sinais em um sistema Linux dizem ao sistema operacional como lidar com um programa ou processo em execução. Quando você fecha um programa normalmente, isso na verdade envia um sinal para o sistema dizendo-lhe para fechar o programa. Você também pode fazer isso manualmente.
Comece procurando um processo que deseja encerrar. Você pode fazer isso com:
ps aux | grep -i
Portanto, se você deseja fechar o Firefox a partir da linha de comando, digite:
ps aux | grep -i firefox
Você obterá uma lista enorme de processos de Raposa de fogo porque é um aplicativo multithread. Procure o processo base para / usr / lib / firefox. Geralmente é o primeiro.

Se você achar isso opressor, também pode usar pgrep. Funciona de forma semelhante, mas fornece apenas os IDs do processo.
pgrep firefox.
O menor ID de processo será o processo básico de que você precisa.

Quando o tiver, encontre o número de identificação do processo. A primeira coisa listada sempre será o usuário que está executando o processo. Em seguida, será o ID do processo. Com isso em mãos, você pode enviar um
matar -SIGTERM 4790.

Cada sinal também possui um número correspondente para abreviação. O número para SIGTERM é 15, então você pode usar isso da mesma forma que a palavra completa.
matar -15 4790
SIGTERM é na verdade a ação padrão do comando kill. Como resultado, você realmente não precisa especificá-lo. Apenas use:
matar 4790
Você obterá exatamente o mesmo resultado.
Isso é muito bom se o processo for responsivo, mas provavelmente você não desligará um processo responsivo dessa forma, pelo menos não em um desktop. Então, o que você faz com um processo que não responde? Existem muitos sinais possíveis. Para ter uma ideia melhor de quão ampla é a variedade, procure-os.
kill -l

Sim, há muitos. Felizmente, você não tocará na grande maioria, a menos que comece a desenvolver ou escrever scripts de administração de sistema. Na maioria das vezes, quando o SIGTERM falha em interromper um processo que não responde, você vai olhar para o equivalente do Linux a Ctrl + Alt + Delete, SIGKILL.
Ao contrário do famoso gerenciador de processos Ctrl + Alt + Delete, o SIGKILL realmente funciona. Na verdade, o objetivo é ignorar todos os outros fatores e eliminar o processo ofensivo, aconteça o que acontecer. Isso também significa que o SIGKILL pode ser perigoso se você errar no processo.
Comece exatamente da mesma maneira, procurando o ID do processo.
pgrep firefox
Agora, em vez de usar o SIGTERM para interromper o processo, use o SIGKILL mais destrutivo.
kill -SIGKILL 4790
Mesmo que o processo esteja completamente bloqueado, ele deve ser fechado em alguns segundos.

Assim como com SIGTERM, há um número correspondente a SIGKILL. Neste caso, é 9.
matar -9 4790
Assim como antes, o processo deve ser encerrado quase imediatamente.
Você também deve estar ciente de SIGINT. Esta é uma interrupção do teclado e é mais um comando do que você pensa na linha de comando. Quando você pressiona Ctrl + C para interromper um processo de uma janela de terminal, você está emitindo um SIGINT. Seu código é 2, e você pode usá-lo como os outros com o comando kill.
matar -2 4790
Isso não é muito comum, pois é muito mais provável que você vá com Ctrl + C, mas é bom estar ciente disso.
Esses são, de longe, os sinais mais comuns que você encontrará no uso diário do Linux. Para uma análise mais técnica dos outros sinais, continue na próxima seção.
Os detalhes técnicos
Se você é um administrador de sistema ou está procurando desenvolver para Linux, provavelmente deseja se aprofundar nos detalhes técnicos por trás do sistema de sinais no Linux. A próxima seção explora a análise técnica completa dos sinais do Linux. Você absolutamente não precisa dessas informações para usar o Linux em seu desktop, mas se pretende explorar o funcionamento interno do sistema, isso pode ser inestimável.
Sinais Padrão
O Linux oferece suporte aos sinais padrão listados abaixo. Vários números de sinal dependem da arquitetura, conforme indicado na coluna "Valor". (Onde três valores são fornecidos, o primeiro geralmente é válido para alpha e sparc, o do meio para i386, ppc e sh, e o último para mips. A - denota que um sinal está ausente na arquitetura correspondente.)
As entradas na coluna "Ação" da tabela especificam a ação padrão para o sinal, como segue:
Prazo: A ação padrão é encerrar o processo.
Ign: A ação padrão é ignorar o sinal.
Essencial: A ação padrão é encerrar o processo e despejar o núcleo.
Pare: A ação padrão é interromper o processo.
Primeiro, os sinais descritos no padrão POSIX.1 original.
Sinal | Valor | Açao | Comente |
ou morte do processo de controle | |||
SIGINT | 2 | Prazo | Interromper do teclado |
SIGQUIT | 3 | Essencial | Sair do teclado |
SIGILL | 4 | Essencial | Instrução Ilegal |
SIGABRT | 6 | Essencial | Abortar sinal de abortar(3) |
SIGFPE | 8 | Essencial | Exceção de ponto flutuante |
SIGKILL | 9 | Prazo | Sinal de matar |
SIGSEGV | 11 | Essencial | Referência de memória inválida |
SIGPIPE | 13 | Prazo | Tubo quebrado: escrever no tubo sem leitores |
SIGALRM | 14 | Prazo | Sinal do temporizador de alarme(2) |
SIGTERM | 15 | Prazo | Sinal de rescisão |
SIGUSR1 | 30,10,16 | Prazo | Sinal definido pelo usuário 1 |
SIGUSR2 | 31,12,17 | Prazo | Sinal definido pelo usuário 2 |
SIGCHLD | 20,17,18 | Ign | Criança parou ou desligou |
SIGCONT | 19,18,25 | Continue se parado | |
SIGSTOP | 17,19,23 | Pare | Parar o processo |
SIGTSTP | 18,20,24 | Pare | Pare de digitar em tty |
SIGTTIN | 21,21,26 | Pare | entrada tty para processo em segundo plano |
SIGTTOU | 22,22,27 | Pare | saída tty para processo em segundo plano |
Os sinais SIGKILL e SIGSTOP não pode ser capturado, bloqueado ou ignorado.
A seguir, os sinais que não estão no padrão POSIX.1, mas descritos em SUSv2 e SUSv3 / POSIX 1003.1-2001.
Sinal | Valor | Açao | Comente |
SIGPOLL | Prazo | Evento pollable (Sys V). Sinônimo de SIGIO | |
SIGPROF | 27,27,29 | Prazo | Timer de criação de perfil expirado |
SIGSYS | 12,-,12 | Essencial | Argumento inválido para rotina (SVID) |
SIGTRAP | 5 | Essencial | Traço / armadilha de ponto de interrupção |
SIGURG | 16,23,21 | Ign | Condição urgente no soquete (4.2 BSD) |
SIGVTALRM | 26,26,28 | Prazo | Despertador virtual (4.2 BSD) |
SIGXCPU | 24,24,30 | Essencial | Limite de tempo de CPU excedido (4,2 BSD) |
SIGXFSZ | 25,25,31 | Essencial | Limite de tamanho de arquivo excedido (4,2 BSD) |
Até e incluindo Linux 2.2, o comportamento padrão para SIGSYS, SIGXCPU, SIGXFSZ, e (em arquiteturas diferentes de SPARC e MIPS) SIGBUS era encerrar o processo (sem um dump de memória). (Em alguns outros Unices, a ação padrão para SIGXCPU e SIGXFSZ é encerrar o processo sem um despejo de núcleo.) O Linux 2.4 está em conformidade com os requisitos POSIX 1003.1-2001 para esses sinais, encerrando o processo com um despejo de núcleo.
A seguir, vários outros sinais.
Sinal | Valor | Açao | Comente |
SIGEMT | 7,-,7 | Prazo | |
SIGSTKFLT | -,16,- | Prazo | Falha de pilha no coprocessador (não utilizado) |
SIGIO | 23,29,22 | Prazo | I / O agora possível (4.2 BSD) |
SIGCLD | -,-,18 | Ign | Um sinônimo para SIGCHLD |
SIGPWR | 29,30,19 | Prazo | Falha de energia (Sistema V) |
SIGINFO | 29,-,- | Um sinônimo para SIGPWR | |
SIGLOST | -,-,- | Prazo | Bloqueio de arquivo perdido |
SIGWINCH | 28,28,20 | Ign | Sinal de redimensionamento da janela (4.3 BSD, Sun) |
SIGUNUSADO | -,31,- | Prazo | Sinal não utilizado (será SIGSYS) |
(Sinal 29 é SIGINFO / SIGPWR em um alfa, mas SIGLOST em um sparc.)
SIGEMT não é especificado em POSIX 1003.1-2001, mas mesmo assim aparece na maioria dos outros Unices, onde sua ação padrão é tipicamente encerrar o processo com um dump de memória.
SIGPWR (que não é especificado em POSIX 1003.1-2001) é normalmente ignorado por padrão nos outros Unices onde aparece.
SIGIO (que não é especificado em POSIX 1003.1-2001) é ignorado por padrão em vários outros Unices.
Sinais em tempo real
O Linux suporta sinais em tempo real conforme definido originalmente nas extensões em tempo real POSIX.4 (e agora incluído no POSIX 1003.1-2001). Linux suporta 32 sinais em tempo real, numerados a partir de 32 (SIGRTMIN) a 63 (SIGRTMAX). (Os programas devem sempre referir-se a sinais em tempo real usando notação SIGRTMIN+ n, uma vez que o intervalo de números de sinal em tempo real varia entre os Unices.)
Ao contrário dos sinais padrão, os sinais em tempo real não têm significados predefinidos: todo o conjunto de sinais em tempo real pode ser usado para fins definidos pelo aplicativo. (Observe, no entanto, que a implementação do LinuxThreads usa os três primeiros sinais em tempo real.)
A ação padrão para um sinal em tempo real não tratado é encerrar o processo de recebimento.
Os sinais em tempo real são distinguidos pelo seguinte:
- Várias instâncias de sinais em tempo real podem ser enfileiradas. Por outro lado, se várias instâncias de um sinal padrão forem entregues enquanto esse sinal estiver bloqueado, apenas uma instância será enfileirada.
- Se o sinal for enviado usando sigqueue(2), um valor de acompanhamento (um inteiro ou um ponteiro) pode ser enviado com o sinal. Se o processo de recebimento estabelecer um manipulador para este sinal usando o SA_SIGACTION bandeira para sigaction(2) então ele pode obter esses dados por meio dosi_value campo do siginfo_t estrutura passada como o segundo argumento para o manipulador. Além disso, o si_pid e si_uid os campos desta estrutura podem ser usados para obter o PID e o ID do usuário real do processo que envia o sinal.
- Os sinais em tempo real são entregues em uma ordem garantida. Vários sinais em tempo real do mesmo tipo são entregues na ordem em que foram enviados. Se diferentes sinais em tempo real forem enviados a um processo, eles serão entregues começando com o sinal de menor número. (Ou seja, sinais com números baixos têm prioridade mais alta.)
Se os sinais padrão e em tempo real estiverem pendentes para um processo, POSIX não especifica qual é entregue primeiro. Linux, como muitas outras implementações, dá prioridade aos sinais padrão neste caso.
De acordo com POSIX, uma implementação deve permitir que pelo menos _POSIX_SIGQUEUE_MAX (32) sinais em tempo real sejam enfileirados para um processo. No entanto, em vez de colocar um limite por processo, o Linux impõe um limite de todo o sistema no número de sinais em tempo real enfileirados para todos os processos. Este limite pode ser visto (e com privilégios) alterado através do /proc/sys/kernel/rtsig-max Arquivo. Um arquivo relacionado,/proc/sys/kernel/rtsig-max, pode ser usado para descobrir quantos sinais em tempo real estão atualmente enfileirados.
DE ACORDO COM.
POSIX.1.
Use o cara comando (% cara) para ver como um comando é usado em seu computador específico.