разница между signalfd и sigwaitinfo?

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

в man-странице написано. Это обеспечивает альтернативу использованию обработчика сигнала или sigwaitinfo (2) и имеет то преимущество, что файловый дескриптор может контролироваться выбором (2), опросом (2) и epoll (7).

Может ли кто-нибудь объяснить мне, что это значит?

  • Обнаружение потери мощности
  • В чем разница между управляющими символами ^ S и ^ Z внутри терминала?
  • Ловушка не захватывает SIGTSTP
  • Как определить номера сигналов, используя strace в приложении?
  • Должна ли служба отменить и прекратить неполную работу над SIGTERM?
  • Почему SIGSTOP не работает внутри сеанса экрана?
  • Сессия SSH приостанавливает средний поток данных; возобновляется с помощью нажатия клавиши
  • Разница между закрытием терминала с помощью кнопки закрытия и Ctrl-D
  • 2 Solutions collect form web for “разница между signalfd и sigwaitinfo?”

    Системные вызовы select (2), poll (2) и epoll (7) – это всего лишь способ дождаться событий в дескрипторах файлов (маленькие целые числа, представляющие канал ввода-вывода). События могут включать «чтение данных для чтения», «готовность к записи», подобные вещи. Ваш код составляет набор дескрипторов файлов, которые в конечном итоге будут иметь событие, а затем вызовы select () или poll () или epoll (), чтобы заставить программу ждать, пока не поступят данные, ядро ​​подключает сокет к другому хосту , у дескриптора была ошибка.

    signalfd (2) добавляет новое событие: сигнал достиг. В unix / linux / * BSD «сигнал» является более или менее асинхронным событием: CPU пытался выполнить незаконную инструкцию, I / O готов, код делится на ноль, модем повесил трубку. signalfd (2) позволяет создавать дескриптор файла, который можно использовать в select (), poll (), epoll (), который имеет событие, когда поступает сигнал.

    Раньше вы указывали бы функцию обработчика, которую ядро ​​волшебным образом вызывает при поступлении сигнала (например, «upcall»). Если вы использовали системный вызов sigaction (), чтобы сообщить ядру, какую функцию вы хотите вызвать, вы получите ту же информацию, что и sigwaitinfo ().

    Разница между установкой функции обработчика с сигналом () или sigaction () над signalfd () заключается в том, что функция обработчика может быть вызвана магическим образом в любое время: части вашего кода должны были быть повторными (а не только потокобезопасными, ум вы), чтобы разобраться с характером сигналов в любое время. С signalfd () сигнал – это еще одно событие, которое нужно учитывать в цикле событий вашего кода. Ваш код просто выполняется, как обычно.

    sigwaitinfo () заставляет ваш код останавливаться до тех пор, пока не поступит сигнал, который вы указали. Ваш код ничего не делает, пока этот сигнал не поступит. Нет цикла событий, ничего. Также похоже, что sigwaitinfo () является частью материала реального времени в ядре Linux. sigwaitinfo () можно рассматривать как обозначение места в коде для ядра для вызова при поступлении сигнала, а не в назначении функции для вызова.

    Дополнение:

    Я только что обнаружил сообщение в блоге о «самоуправляемом трюке ». По-видимому, не только неудобно кодовым образом обрабатывать сигналы и выбирать на основе ввода-вывода, вы также можете страдать от «неприятных условий гонки». Собственный трюк оборачивается вокруг этого, делая в основном то, что делает signalfd (2), но все в пространстве пользователя и за счет большего количества кода.

    В ближайшее время: когда вы используете sigwaitinfo (), вы можете ждать только сигналов. Когда вы используете signalfd () в сочетании с poll / select / etc, вы можете дождаться любого события, к которому можно получить доступ через дескриптор файла (файл IO, timerfd, eventfd и т. Д.).

    Interesting Posts

    Почему порядок параметров влияет на файлы, найденные `find`?

    Снимок контейнера Linux в Debian

    Как установить поддержку языка в TexLive на Debian Wheezy?

    Отключить баннер ssh для определенных пользователей или ips

    Выполнение автозаполнения bash

    Перенаправление всего трафика tcp в Tor с помощью iptables (прокси?)

    X Windows специальные программы: некоторые из них все еще существуют?

    Как выделить текущую строку и курсор в .vimrc?

    Я приобрел у Amazon предустановленный, используемый, Asus Mini Notebook. Я нажал кнопку питания во время установки обновлений.

    Скрытые файлы и каталоги в домашнем каталоге пользователя

    Регулярное выражение ERE для разделения () между разделителем и конечным словом

    Как использовать If-Else для выполнения определенных действий, если дни недели – это дни?

    gdb не входит в функцию, хотя доступен источник

    Запустить независимый процесс

    Услуги iscsi vs iscsid

    Linux и Unix - лучшая ОС в мире.