Представьте, что у меня есть процесс, который начинает несколько дочерних процессов. Родитель должен знать, когда ребенок уходит. Поток, который заблокирован в waitpid , чтобы изящно выйти и присоединиться к нему. Приятно, что вещи убирают сами, но это может быть не так уж и важно. А затем поспите в течение какого -то произвольного времени, чтобы предотвратить напряженное ожидание. Однако тогда я могу только знать, когда ребенок выходил время от времени. В моем случае не может быть очень критическим, что я знаю, когда ребенок сразу же уходит, но я хотел бы знать как можно скорее ... < /p>
Я могу использовать сигнал Обработчик для Sigchld , и в обработчике сигнала делайте все, что я собирался делать, когда ребенок выходит, или отправьте сообщение в другой поток, чтобы сделать какое -то действие. Но использование обработчика сигнала немного запутывает поток кода. 5 сек. Поскольку выход процесса не является критической работой, я могу лениво сигнализировать поток в выход, при этом все еще заблокировав его в waitpid в остальное время, всегда готовое к реагированию. Есть ли такой вызов в Linux? Из альтернатив, какой из них лучше?
Другой метод, основанный на ответах, - это заблокировать sigchld во всех потоках с помощью pthread \ _sigmask () . Затем в одном потоке продолжайте звонить sigtimedwait () , ища sigchld . Это означает, что я могу провести время на этом вызове и проверить, должен ли поток выйти, а если нет, оставаться заблокированным в ожидании сигнала. После того, как Sigchld будет доставлен в этот поток, мы можем немедленно отреагировать на него и в строке потока ожидания, не используя обработчик сигнала.
Подробнее здесь: https://stackoverflow.com/questions/282 ... th-timeout
Waitpid эквивалент с тайм -аутом? ⇐ C++
Программы на C++. Форум разработчиков
1739015559
Anonymous
Представьте, что у меня есть процесс, который начинает несколько дочерних процессов. Родитель должен знать, когда ребенок уходит. Поток, который заблокирован в waitpid , чтобы изящно выйти и присоединиться к нему. Приятно, что вещи убирают сами, но это может быть не так уж и важно. А затем поспите в течение какого -то произвольного времени, чтобы предотвратить напряженное ожидание. Однако тогда я могу только знать, когда ребенок выходил время от времени. В моем случае не может быть очень критическим, что я знаю, когда ребенок сразу же уходит, но я хотел бы знать как можно скорее ... < /p>
Я могу использовать сигнал Обработчик для Sigchld , и в обработчике сигнала делайте все, что я собирался делать, когда ребенок выходит, или отправьте сообщение в другой поток, чтобы сделать какое -то действие. Но использование обработчика сигнала немного запутывает поток кода. 5 сек. Поскольку выход процесса не является критической работой, я могу лениво сигнализировать поток в выход, при этом все еще заблокировав его в waitpid в остальное время, всегда готовое к реагированию. Есть ли такой вызов в Linux? Из альтернатив, какой из них лучше?
Другой метод, основанный на ответах, - это заблокировать sigchld во всех потоках с помощью pthread \ _sigmask () . Затем в одном потоке продолжайте звонить sigtimedwait () , ища sigchld . Это означает, что я могу провести время на этом вызове и проверить, должен ли поток выйти, а если нет, оставаться заблокированным в ожидании сигнала. После того, как Sigchld будет доставлен в этот поток, мы можем немедленно отреагировать на него и в строке потока ожидания, не используя обработчик сигнала.
Подробнее здесь: [url]https://stackoverflow.com/questions/282176/waitpid-equivalent-with-timeout[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия