O que são armadilhas de sinal?

0

Sinais são o meio de comunicação entre processos, mas eu tenho algumas perguntas O que são armadilhas de sinal? Como as armadilhas estão relacionadas aos sinais no sistema operacional?

    
por rashidali 15.03.2016 / 19:25

2 respostas

2

Às vezes, um exemplo vale mais que mil palavras: Este código em c ++ expõe um manipulador de sinal muito simples.

void gracefullShutdown(int sigNum) { 

    // cleanup or do wathever you need to do in case of received signal(s)

    // Terminate this executable
    exit(sigNum);
}

int main(int argc, char* argv[]) {

    signal(SIGINT , gracefullShutdown); 
    signal(SIGTERM , gracefullShutdown);

    std::cout << "starting..." << std::endl;

    while(1);

    exit(EXIT_SUCCESS);
}

Quando você pressiona Ctrl + C durante a execução deste programa, o kernel do linux enviará um sinal SIGINT para este programa, normalmente ele terminará, mas neste caso preciso, você terá a possibilidade de fazer algo antes de finalizar.

    
por 15.03.2016 / 19:59
2

Para "capturar um sinal" (também chamado instalar um manipulador de sinal ) é fazer alguma coisa quando o sinal é recebido. Aqui está um pequeno script de shell para ilustrar:

#!/bin/sh

bye() {
    echo bye
    exit 1
}

trap bye SIGUSR1

echo hello

for Y in $(jot 80)
do
    printf '.'
    sleep 1
done

echo not reached

Executado:

$ shtrap & { sleep 3 && kill -s SIGUSR1 $!; }
[2] 22471
hello
...[1]   User defined signal 1   sleep 1
bye

Iniciamos o script como um processo em segundo plano, aguardamos 3 segundos e aumentamos o sinal SIGUSR1 com kill . O script captura esse sinal e chama sua função bye .

O sistema operacional define o comportamento padrão para cada sinal. Ao capturá-lo, o programa pode alterar o padrão. Os daemons frequentemente interceptam o SIGHUP dessa forma para forçar a releitura de um arquivo de configuração enquanto o programa está em execução.

    
por 15.03.2016 / 22:03

Tags