Pular para o conteúdo
Campanário dos Sinais

/static/campanario/sino/sigalrm/

Menu

SIG-017 · Relógios

SIGALRM

O despertador: alarm() dá corda e o kernel toca na hora marcada.

O processo dá corda com alarm(segundos), segue a vida, e quando o prazo vence o kernel toca este sino. É o timeout original do Unix: antes de select ter prazo e de existir timerfd, era assim que se desistia de esperar.

O detalhe que morde: cada processo tem um só despertador deste — um alarm() novo cancela o anterior — e o sleep(3) de antigamente era implementado com ele. O utilitário timeout(1) é o herdeiro de balcão dessa ideia.

$ perl -e 'alarm 2; sleep 30'
Alarm clock
$ echo $?
142
(142 = 128 + 14: o despertador venceu o sono)
Trinta segundos de sono, dois de corda.