У нас есть приложение, которое создает несколько потоков, используя библиотеку pthread.Поскольку мы хотим, чтобы только основной процесс обрабатывал определенные сигналы, все потоки имеют блоки SIGTERM, SIGINT и SIGHUP.В одном из наших pthread-ов мы перезапускаем сеть, используя
system("/etc/init.d/networking restart");
Похоже, что системный вызов разветвит другой дочерний процесс, который наследует маску сигналов pthreadПроблема в том, что он перезапускает демон ssh, а недавно созданный демон ssh унаследовал маску сигналов из нашего pthread (блокируются SIGTERM, SIGINT и SIGHUP).В результате будущая сеть перезагружается, что занимает много времени, так как она не может отправить SIGTERM и ожидает тайм-аут перед отправкой SIGKILL.Мой вопрос заключается в том, как лучше всего перезагрузить сеть из многопоточного приложения, такого как наше.Есть ли способ сказать init перезапустить службу?Я думал о разблокировании сигналов перед вызовом системы, но если кто-то завершит наше приложение в течение этого времени, наш основной обработчик сигналов может не быть вызван.Вот вывод из uname -a
Linux ts 2.6.35.3-433-g0fae922 #6 PREEMPT Thu Jul 28 09:24:24 MST 2011 armv7l GNU/Linux
Любая помощь приветствуется,
Мартин.