Сиггация против сигнала
Может кто-нибудь, пожалуйста, объясните разницу между sigaction и сигнал. Я знаю, что они работают по-разному, в зависимости от того, на какой машине вы работаете, например, на Mac, Windows или Linux, и эта подпись работает одинаково на всех платформах. Но мой вопрос почему, потому что я пытался использовать сигнал на разных платформах и получил тот же результат. Также, какой из них вы бы порекомендовали использовать для лучшей практики.
1 ответ
Я знаю немного о sigaction
а также signal
, Но я знаю следующее:
sigaction
вызов более сложен в использовании, чемsignal
позвоните (как вы уже знаете).sigaction
позволяет получить больше информации о сигнале, полученном вашей программой (см.siginfo_t
состав).- Согласно книге Майкла КЕРРИСКа: "Интерфейс программирования Linux" (гл. 22, стр. 456): "... это хорошая практика, всегда использовать
sigaction
, скорее, чемsignal
установить обработчики сигналов." - Наконец (снова из книги Майкла Керриска): "Ядро Linux содержит реализацию
signal
как системный вызов, эта реализация обеспечивает более старую ненадежную семантику. Тем не мение,glibc
обходит этот системный вызов, предоставляя функцию библиотеки сигналов, которая вызываетsigaction
"
Надеюсь, поможет.