alarm(2) - o que acontece quando alguém altera a hora do sistema enquanto ele espera?

StackOverflow https://stackoverflow.com/questions/4269850

  •  28-09-2019
  •  | 
  •  

Pergunta

A página de manual diz que alarm() arranges for a SIGALRM signal to be delivered to the process in _seconds_ seconds. O que acontece se alguém (como o usuário ou ntpd) altera o relógio do sistema enquanto o alarme está pendente?Como é contabilizado o tempo restante do alarme?

Foi útil?

Solução

Em primeiro lugar, os administradores mais responsáveis ​​e o xntpd certamente não ajustarão o tempo em grandes períodos.Fazer isso quebra o cron, por exemplo.

Mas mesmo se eles fizessem isso, o alarme usa o Setitimer () com Itimer_real - o que significa que ainda esperaria por tantos ticks de relógio.Finja que o clock do sistema funciona a 1 milhão de Hz, um milhão de ticks por segundo.Ok, então 2 segundos equivalem a 2 milhões de tiques do relógio em tempo real, independentemente de como a hora do sistema está definida.settimer() continua diminuindo seu contador para zero.Quando chega a zero, SIGALARM é aumentado.Pode haver uma folga considerável no lado longo disso porque outros processos podem ter a CPU.alarm() é garantido para disparar em MÍNIMO de n segundos - o tempo real decorrido pode ser um pouco mais longo.

Mexer com o tempo do sistema quebra softwares de agendamento como AppWorx ou cron.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top