Просыпается ли функция sleep (), посылая какой-либо сигнал в конце ожидания? - PullRequest
0 голосов
/ 21 сентября 2018

APUE говорит о sleep()

Эта функция sleep() вызывает приостановку вызывающего процесса до тех пор, пока либо

  1. Количество настенных часов, указанное в секундахистекло.
  2. Процесс перехватывает сигнал, и обработчик сигнала возвращается.

Работает ли первый случай, посылая какой-то конкретный сигнал самому процессу?Если да, то какой сигнал?alarm() может отправить сигнал SIGALARM вызывающему процессу через определенный промежуток времени, поэтому мне интересно, работает ли sleep() таким же образом.

Меняет ли sleep() состояние вызывающегопроцесс в том же состоянии, что и sigsuspend() меняется на?На какие состояния процесса меняются две функции?

Правильно ли, что приостановленный процесс может быть вызван только сигналом?Вот почему у меня есть вопрос.

Спасибо.

1 Ответ

0 голосов
/ 22 сентября 2018

Ядро Linux абсолютно не нуждается в использовании пользовательских сигналов для изменения состояния процесса.Итак, излучение сигнала выполняется только для удовлетворения требований к функции пользовательской библиотеки.

Поскольку документация для функции sleep не говорит о том, что какой-либо сигнал излучается после окончания сна, поэтому ядров этом случае сигналы не используются.

Правильно ли, что приостановленный процесс может быть вызван только сигналом?

Да, код пользователя может пробудить спящий процесстолько отправив сигнал на него.Это верно и для большинства неработоспособных состояний процессов.

...