Skip to main content

Sinal - Comando Linux / Unix

Aprenda Linux - Comandos básicos do Terminal para Ubuntu (Pode 2025)

Aprenda Linux - Comandos básicos do Terminal para Ubuntu (Pode 2025)
Anonim

O Linux suporta sinais confiáveis ​​POSIX (doravante "sinais padrão") e sinais POSIX em tempo real.

Sinais Padrão

O Linux suporta os sinais padrão listados abaixo. Vários números de sinal são dependentes da arquitetura, conforme indicado na coluna "Valor". (Onde três valores são dados, o primeiro é geralmente válido para alfa e sparc, o intermediário para i386, ppc e sh, e o último para mips.

A - indica que um sinal está ausente na arquitetura correspondente.

As entradas na coluna "Ação" da tabela especificam a ação padrão do sinal, da seguinte maneira:

Prazo

A ação padrão é encerrar o processo.

Ign

A ação padrão é ignorar o sinal.

Testemunho

A ação padrão é terminar o processo e despejar o núcleo.

Pare

A ação padrão é parar o processo.

Primeiro os sinais descritos no padrão POSIX.1 original.

SinalValorAçaoComente
ou morte do processo de controle
SIGINT2PrazoInterromper do teclado
SIGQUIT3TestemunhoSaia do teclado
SIGILL4TestemunhoInstrução Ilegal
SIGABRT6TestemunhoAnular o sinal de abortar (3)
SIGFPE8TestemunhoExceção de ponto flutuante
SIGKILL9PrazoSinal de matar
SIGSEGV11TestemunhoReferência de memória inválida
SIGPIPE13PrazoTubo quebrado: escreva para canos sem leitores
SIGALRM14PrazoSinal do temporizador alarme (2)
SIGTERM15PrazoSinal de terminação
SIGUSR130,10,16PrazoSinal definido pelo usuário 1
SIGUSR231,12,17PrazoSinal definido pelo usuário 2
SIGCHLD20,17,18IgnCriança parada ou terminada
SIGCONT19,18,25 Continue se parado
SIGSTOP17,19,23PareProcesso de parada
SIGTSTP18,20,24ParePare de digitar em tty
SIGTTIN21,21,26Pareentrada tty para o processo em segundo plano
SIGTTOU22,22,27Paretty saída para o processo em segundo plano

Os sinaisSIGKILL eSIGSTOP não pode ser capturado, bloqueado ou ignorado.

Em seguida, os sinais não estão no padrão POSIX.1, mas são descritos no SUSv2 e no SUSv3 / POSIX 1003.1-2001.

SinalValorAçaoComente
SIGPOLL PrazoEvento poluível (Sys V). Sinônimo de SIGIO
SIGPROF27,27,29PrazoTemporizador de criação de perfil expirado
SIGSYS12,-,12TestemunhoArgumento incorreto para a rotina (SVID)
SIGTRAP5TestemunhoTrace / breakpoint trap
SIGURG16,23,21IgnCondição urgente na tomada (4.2 BSD)
SIGVTALRM26,26,28PrazoDespertador virtual (4.2 BSD)
SIGXCPU24,24,30TestemunhoLimite de tempo de CPU excedido (4.2 BSD)
SIGXFSZ25,25,31TestemunhoLimite de tamanho de arquivo excedido (4.2 BSD)

Até e incluindo o Linux 2.2, o comportamento padrão paraSIGSYS, SIGXCPU, SIGXFSZe (em arquiteturas diferentes de SPARC e MIPS)SIGBUS foi para encerrar o processo (sem um despejo de núcleo). (Em alguns outros Unices, a ação padrão paraSIGXCPU eSIGXFSZ é terminar o processo sem um dump principal.) O Linux 2.4 está em conformidade com os requisitos do POSIX 1003.1-2001 para esses sinais, encerrando o processo com um dump principal.

Em seguida, vários outros sinais.

SinalValorAçaoComente
SIGEMT7,-,7Prazo
SIGSTKFLT-,16,-PrazoErro de pilha no coprocessador (não utilizado)
SIGIO23,29,22PrazoE / S agora possível (4.2 BSD)
SIGCLD-,-,18IgnSinônimo de SIGCHLD
SIGPWR29,30,19PrazoFalha de energia (sistema V)
SIGINFO29,-,- Um sinônimo para SIGPWR
SIGLOST-,-,-PrazoBloqueio de arquivo perdido
SIGWINCH28,28,20IgnSinal de redimensionamento da janela (4.3 BSD, Sun)
SIGUMADO-,31,-PrazoSinal não utilizado (será SIGSYS)

(O sinal 29 éSIGINFO / SIGPWR em um alfa, masSIGLOST em um sparc.)

SIGEMT não é especificado no POSIX 1003.1-2001, mas nunca aparece na maioria dos outros Unices, onde sua ação padrão normalmente é encerrar o processo com um dump principal.

SIGPWR (que não é especificado no POSIX 1003.1-2001) é normalmente ignorado por padrão nos outros Unices onde aparece.

SIGIO (que não é especificado no 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 originalmente definidos nas extensões em tempo real do POSIX.4 (e agora incluídas no POSIX 1003.1-2001). O Linux suporta 32 sinais em tempo real, numerados de 32 (SIGRTMIN) a 63 (SIGRTMAX). (Os programas devem sempre se referir a sinais em tempo real usando notaçãoSIGRTMIN+ n, já que o intervalo de números de sinais em tempo real varia entre os Unices.)

Ao contrário dos sinais padrão, os sinais em tempo real não têm significados pré-definidos: todo o conjunto de sinais em tempo real pode ser usado para propósitos 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 não tratado em tempo real é finalizar o processo de recebimento.

Sinais em tempo real são distinguidos pelo seguinte:

  1. 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 no momento, apenas uma instância será enfileirada.
  2. Se o sinal for enviado usandosigqueue(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 oSA_SIGACTION bandeira parasigação(2) então ele pode obter esses dados através do si_value campo do siginfo_t estrutura passada como o segundo argumento para o manipulador. Além disso, o si_pid e si_uid campos dessa estrutura podem ser usados ​​para obter o PID e o ID do usuário real do processo que envia o sinal.
  3. 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 são enviados para um processo, eles são entregues começando com o sinal de menor número. (Isto é, os sinais de baixo número têm a maior prioridade).

Se os sinais padrão e em tempo real estiverem pendentes para um processo, o POSIX não o especifica, o qual é entregue primeiro. O 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 em um processo. No entanto, em vez de colocar um limite por processo, o Linux impõe um limite para todo o sistema no número de sinais em tempo real enfileirados para todos os processos.

Este limite pode ser visualizado (e com privilégio) 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 enfileirados no momento.

DE ACORDO COM

POSIX.1

Importante: Use o homem comando ( % homem ) para ver como um comando é usado em seu computador particular.