Sinais padrão ou regulares:
O sinal do arquivo de cabeçalho.h 'tem sinais especificados como uma constante macro. O título do sinal começa com "SIG" e é precedido por uma breve visão geral do sinal. Consequentemente, qualquer sinal tem um valor numérico distinto. O código do programa deve usar o nome do sinal, não vários sinais. A causa por trás disso é que o número de sinais pode variar dependendo do sistema, mas a interpretação dos nomes é padrão. Abaixo estão alguns sinais regulares com suas funcionalidades definidas.
SIGHUP:
Este sinal irá desligar o processamento. O sinal SIGHUP está sendo lançado para indicar a desassociação do terminal do usuário, provavelmente devido a uma comunicação remota sendo interrompida ou desligada.
SIGINT:
Isso vai atrapalhar o processo. O sinal SIGINT é recebido sempre que o usuário insere a tecla INTR (geralmente Ctrl + C).
SIGQUIT:
Vai parar ou sair do processamento. O sinal SIGQUIT é recebido sempre que o usuário insere a tecla QUIT (geralmente Ctrl + \).
SIGILL:
Ele é executado quando um comando ilícito é feito. O sinal SIGILL é criado sempre que um esforço está sendo feito para executar um lixo ou comando privilegiado. Sempre que a pilha estourar e a máquina tiver problemas para executar um controlador de sinal, SIGILL também pode ser criado.
SIGTRAP:
É chamado quando alguma instrução de rastreamento de rastreamento está sendo executada. O sinal SIGTRAP é criado por um comando de ponto de interrupção e outro comando trap. O depurador usa tal sinal.
SIGABRT:
É chamado de sinal de aborto. O sinal SIGABRT é criado chamando o método abort (). Tal sinal é usado para apontar a imprecisão observada pelo código acima mencionado e registrada pela chamada do método abort ().
SIGFPE:
Exceção para pontos flutuantes; O sinal SIGFPE é produzido quando ocorre um erro matemático catastrófico.
SIGUSR1 e SIGUSR2:
Os sinais SIGUSR1 e SIGUSR2 podem ser usados da maneira que você quiser. É benéfico para uma fácil interação entre processos criar um manipulador de sinal para esses sinais no aplicativo que obtém o sinal.
Comportamento padrão dos sinais:
Existe um comportamento ou ação padrão para cada sinal, e é possível ajustar o comportamento padrão usando a função de manipulador. O comportamento automático do sinal SIGKILL e SIGABRT não pôde ser modificado ou negligenciado.
Prazo: Isso vai encerrar a operação.
Testemunho: Um documento de despejo central será gerado e a operação será encerrada.
Ign: O processo ignoraria um sinal.
Pare: Isso vai parar a operação.
Cont: A operação não será interrompida.
Tratamento de sinais:
O processo tem uma preferência de comportamento para um sinal quando ele é confirmado. O processo pode se comportar da seguinte forma:
O sinal é descartado automaticamente quando o comportamento do sinal definido é esquecido.
Usando métodos como sinal ou sigação, o código pode registrar uma função de manipulador. É chamado de pegar um sinal de um manipulador.
Se um sinal não está sendo tratado ou negligenciado, a ação padrão pode ocorrer.
Você pode definir a função de Manuseio de Sinal como:
$ Int signal () int signum, void (* funk) (int))Quando o processamento obtém um signum de sinal, o método signal () pode chamar o método 'func'. Signal () reverte um ponteiro para o método 'func' se for próspero ou uma exceção for retornada para errno e -1 ao invés.
O ponteiro 'func' é capaz de ter três valores:
SIG_DFL: Este é um ponteiro para o método SIG DFL () padrão, definido no cabeçalho.documento h usado para obter o comportamento padrão do sinal.
SIG_IGN: Esta é uma referência ao método SIG IGN () ignorar, especificado no cabeçalho.documento h.
Ponteiro de método do manipulador definido pelo usuário: O tipo de método manipulador definido pelo usuário void (*) (int), implica que a categoria de retorno é nula e que o argumento solitário é int.
Criar um novo sinal de arquivo.c 'e escreva abaixo o código do manipulador de sinal nele.
Ligue o sinal.arquivo c com gcc.
Durante a execução do sinal.arquivo c, temos um loop infinito sendo executado no método principal. Ao pressionar CTRL + C, iniciou o método do manipulador, e a execução do método principal parou. O processamento do método principal continuou após a realização do método manipulador. Ao pressionar Ctrl + \, a operação é encerrada.
Ignorar sinal:
Para ignorar o sinal, crie um sinal de arquivo.c 'e escrever sob o código nele.
Amarre o ignorar.arquivo c com gcc.
Execute o sinal.arquivo c. Toque em CTRL + C, o sinal SIGNIT é criado; no entanto, o comportamento passa despercebido porque o método do manipulador é enumerado para o método SIG_IGN ().
Registre novamente o manipulador de sinais:
Para registrar novamente o manipulador de sinal, crie um novo arquivo 'rereg.c 'e inscreva o código abaixo nele:
Associar o novo registro.arquivo c com gcc.
Execute o novo registro.arquivo c. Ao pressionar CTRL + C pela primeira vez, o método do manipulador foi gerado e o manipulador de sinal foi registrado novamente em SIG_DFL. Enquanto pressionava CTRL + C novamente, a execução foi encerrada.
Envie sinais usando Raise ():
Criar um arquivo 'enviar.c 'e adicione o código abaixo. Para enviar sinais para o método de chamada, o método raise () é usado.
Relacionar o envio.arquivo c com gcc.
O processo utiliza o método raise () para transmitir o sinal SIGUSR1 por conta própria.
Envie sinais usando kill ():
Adicione o código abaixo em 'raise.c '. Use o método kill () para enviar sinais para o grupo de processo.
Ligue o aumento.arquivo c com gcc.
Usando o método kill (), o processo direciona o sinal SIGUSR1 para o referido.
Interação pai-filho:
Para assistir à interação entre pais e filhos, escreva o código abaixo em um arquivo.
Ligue o comunicador.arquivo c com gcc.
Fork () / método gera filho, reverte zero para o processo filho e ID filho para pai.
Conclusão:
Neste guia, vimos como criar, manipular, enviar, ignorar, registrar novamente e usar o sinal para interação entre processos no Linux.