Есть (
SIGRTMIN + 1
) безопасный для межпроцессного общения? Будет ли оно изменяться в разных процессах?Некоторые вопросы о сигналах linuxЕсть ли какие-либо отличия в использовании
sigqueue(2)
илиkill(2)
для отправки стандартных сигналов и сигналов в реальном времени?
Если я используюsigqueue(2)
, отправьте сериюSIGUSR1
(стандартные сигналы) и обрабатывайте их медленно, есть ли в очереди очередные экземплярыSIGUSR1
?
Как насчет использованияkill(2)
для отправкиSIGRTMIN
(сигналы реального времени)? Будут ли они поставлены в очередь?
ответ
sigqueue() может использоваться для отправки только сигналов в реальном времени и kill() может использоваться для отправки только стандартных сигналов. Я не пытался отправить неверный сигнал с помощью API. Но я бы ожидал, что он потерпит неудачу с некоторой соответствующей ошибкой. Linux не ставит в очередь стандартные сигналы. Сигналы в реальном времени помещаются в очередь. Максимальное количество реальных сигналов времени, которые могут быть поставлены в очередь, определяются как RLIMIT_SIGPENDING
Вы можете использовать любой реальный сигнал времени до тех пор, пока приемник имеет настройки обработчика для конкретного отправителя сигналу передачи.
EDIT
я был неправ раньше в моем ответе. Похоже, kill() может отправлять сигналы в реальном времени. Но из комментария в __send_signal() похоже, что использование kill для отправки сигналов в реальном времени может не иметь желаемого эффекта в некоторых случаях, то есть: сигналы могут не попадать в очередь.
/*
* Real-time signals must be queued if sent by sigqueue, or
* some other real-time mechanism. It is implementation
* defined whether kill() does so. We attempt to do so, on
* the principle of least surprise, but since kill is not
* allowed to fail with EAGAIN when low on memory we just
* make sure at least one signal gets delivered and don't
* pass on the info struct.
*/
Это сообщение не новость, но высокий рейтинг на Google и, к сожалению, вводит в заблуждение, так вот некоторые пояснения:
- можно послать любой сигнал с любой из этих функций
- sigqueue позволяет передачи более «контекста» [например, информация, @see siginfo et. al], в отличие от kill/raise
- В соответствии с сигналами реального времени - неважно, отправлены или поставлены в очередь - они будут вести себя одинаково [например, в очереди ср. сгруппированы так же, как с сигналами без RT]
- 1. Концептуальные вопросы о процессах и сигналах
- 2. Некоторые вопросы о posix_memalign
- 3. Некоторые вопросы о TestComplete
- 4. Некоторые вопросы о ресурсах
- 5. Некоторые вопросы о Scanf
- 6. Некоторые вопросы о dotnetopenauth
- 7. Некоторые вопросы о CloudKit
- 8. некоторые вопросы о paxos
- 9. Некоторые вопросы о MSBI
- 10. Некоторые вопросы о UIScrollView
- 11. Некоторые вопросы о PBKDF2
- 12. Некоторые вопросы о AsyncTask
- 13. Некоторые вопросы о iTextSharp
- 14. некоторые вопросы о setMnemonic
- 15. Некоторые вопросы о codenameone
- 16. Некоторые вопросы о Flurry
- 17. Некоторые вопросы о KeyEvent
- 18. Некоторые вопросы о весне
- 19. Некоторые вопросы о NEHotspotHelper
- 20. Некоторые вопросы о ssl
- 21. Некоторые вопросы о ООП
- 22. Некоторые вопросы о Теано отсканировать
- 23. Некоторые вопросы о Apple Watch
- 24. Некоторые вопросы о Workflow Foundation
- 25. Некоторые базовые вопросы о СУРБД
- 26. Некоторые вопросы о Asp.net MVC
- 27. Некоторые вопросы о ASP.Net Postback
- 28. Некоторые вопросы о PHPExcel Charts
- 29. некоторые вопросы о Extjs 4.0.7
- 30. Некоторые вопросы о сроках Hydra
По опыту, прочитав исходный код ядра или прочитав спецификации Posix? Если у вас есть некоторые источники, было бы интересно поделиться ими ... –
Но факт как 'kill (2)', так и 'sigqueue (2)' может отправлять любые сигналы без сбоев. Я написал небольшой тест, чтобы доказать, что они работают. Но я не знаю, как отправить исходный код в комментарий. – majie