Instala um manipulador de sinal

# pcntl_signal

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

pcntl_signal — Instala um manipulador de sinal

### Descrição

function pcntl_signal(int `$signal`, callable|int `$handler`, bool `$restart_syscalls` = `true`): bool

A função pcntl_signal() instala um novo manipulador de sinal ou substitui o manipulador de sinal atual pelo sinal indicado por `signal`.

### Parâmetros

`signal`

  O número do sinal.

`handler`

  O manipulador de sinal. Pode ser um callable, que será invocado para manipular o sinal, ou qualquer uma das duas constantes globais `SIG_IGN` ou `SIG_DFL`, que ignorarão o sinal ou restaurarão o manipulador de sinal padrão, respectivamente.

  Se um callable for fornecido, ele deve implementar a seguinte assinatura:

  function handler(int `$signo`, mixed `$siginfo`): void
  `signal`
    O sinal que está sendo manipulado.
  `siginfo`
    Se os sistemas operacionais suportarem estruturas siginfo_t, este parâmetro será um array de informações de sinal dependentes do sinal.

  > Nota:

  > Observe que, quando é definido um manipulador para um método de objeto, a contagem de referências desse objeto é aumentada, o que o faz persistir até que seja alterado o manipulador para outra coisa ou o script termine.

`restart_syscalls`

  Especifica se a reinicialização da chamada do sistema deve ser usada quando este sinal chegar.

### Valor Retornado

Retorna `true` em caso de sucesso ou `false` em caso de falha.

### Registro de Alterações

Versão | Descrição
--- | ---
7.1.0 | A partir do PHP 7.1.0, a função de retorno do manipulador recebe um segundo argumento contendo o a informação do sinal específico. Este dado é fornecido somente se o sistema operacional tiver a estrutura siginfo_t. Se o sistema operacional não implementar siginfo_t, NULL será fornecido.

### Exemplos

Exemplo #1 Exemplo de pcntl_signal()

    <?php
    pcntl_async_signals(true);

    // função de manipulação de sinal
    function sig_handler($signo)
    {

         switch ($signo) {
             case SIGTERM:
                 // manipula tarefas de desligamento
                 exit;
                 break;
             case SIGHUP:
                 // manipula tarefas de reinicialização
                 break;
             case SIGUSR1:
                 echo "Capturado SIGUSR1...\n";
                 break;
             default:
                 // manipula todas as outras tarefas
         }

    }

    echo "Installing signal handler...\n";

    // configure manipuladores de sinal
    pcntl_signal(SIGTERM, "sig_handler");
    pcntl_signal(SIGHUP,  "sig_handler");
    pcntl_signal(SIGUSR1, "sig_handler");

    // ou use um objeto
    // pcntl_signal(SIGUSR1, array($obj, "do_something"));

    echo "Gerando sinal SIGUSR1 para si mesmo...\n";

    // envia SIGUSR1 ao ID de processo atual
    // funções posix_* requerem a extensão posix
    posix_kill(posix_getpid(), SIGUSR1);

    echo "Feito\n";

    ?>

### Notas

pcntl_signal() não empilha os manipuladores de sinal, mas os substitui.

#### Métodos de Despacho

Existem vários métodos de despacho de manipuladores de sinais:

- Despacho assíncrono com pcntl_async_signals() habilitado. Este é o método recomendado.
- Configurando a frequência de tiques
- Despacho manual com pcntl_signal_dispatch()

Quando os sinais são despachados de forma assíncrona ou usando execução baseada em tiques, funções de bloqueio como sleep() podem ser interrompidas.

### Veja Também

- » Signal (IPC) na Wikipedia
- pcntl_async_signals() - Habilita/desabilita o tratamento de sinal assíncrono ou retorna a configuração antiga
- pcntl_fork() - Bifurca o processo em execução no momento
- pcntl_signal_dispatch() - Chama manipuladores de sinais para sinais pendentes
- pcntl_waitpid() - Aguarda ou retorna o status de um filho bifurcado

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open