Por que o SIGUSR1 faz com que o processo seja finalizado?

19

Fiquei surpreso com essa comentar em outra pergunta:

Sending dd the USR1 signal too soon after it has started (i.e. in a bash script, the line after you started it) will in fact terminate it

Alguém pode explicar por que ?

    
por Alois Mahdal 14.05.2012 / 00:08

1 resposta

34

Cada sinal tem uma "disposição padrão" - o que um processo faz por padrão quando recebe esse sinal. Há uma tabela na página signal(7) man listando-as:

Signal     Value     Action   Comment
──────────────────────────────────────────────────────────────────────
...
SIGUSR1   30,10,16    Term    User-defined signal 1
SIGUSR2   31,12,17    Term    User-defined signal 2

SIGUSR1 e SIGUSR2 têm a ação padrão Term - o processo é finalizado. dd registra um manipulador para interceptar o sinal e fazer algo útil com ele, mas se você sinalizar muito rapidamente, ele não teve tempo de registrar esse manipulador ainda, então a ação padrão acontece ao invés

    
por 14.05.2012 / 00:14

Tags