Я не уверен, пытаюсь ли я воткнуть квадратный колышек в круглое отверстие, но я пытаюсь использовать сигналы для координации пяти или шести дочерних процессов с их родителем.У меня есть родительская настройка для обработки этих сигналов
signal(1, SigControllerCarWaiting1);
signal(2, SigControllerCarWaiting2);
signal(3, SigControllerCarWaiting3);
signal(4, SigControllerCarWaiting4);
signal(5, SigControllerCarWaiting5);
signal(6, SigControllerCarEnter1);
signal(7, SigControllerCarEnter2);
signal(8, SigControllerCarEnter3);
signal(9, SigControllerCarEnter4);
signal(10, SigControllerCarEnter5);
И это в основном работает.Когда я запускаю свою программу, много раз она завершается, как и ожидалось.Но в некоторых случаях он не сможет переопределить поведение по умолчанию, и мой родительский процесс выведет что-то вроде «Зависание», а затем прекратит работу, оставив группу детей все еще выполняющейся.
Я пыталсявосстановление сигнала в обработчике, как ...
void SigControllerCarWaiting5() { signal(5, SigControllerCarWaiting5); SigControllerCarWaiting(4); }
void SigControllerCarWaiting4() { signal(4, SigControllerCarWaiting4); SigControllerCarWaiting(3); }
void SigControllerCarWaiting3() { signal(3, SigControllerCarWaiting3); SigControllerCarWaiting(2); }
void SigControllerCarWaiting2() { signal(2, SigControllerCarWaiting2); SigControllerCarWaiting(1); }
void SigControllerCarWaiting1() { signal(1, SigControllerCarWaiting1); SigControllerCarWaiting(0); }
Но это, похоже, не оказывает влияния.Иногда это отлично работает;в других случаях произойдет сбой с сигнальным текстом и будет убит родитель.Я очень новичок во всем этом и думал, что кто-то может направить меня в правильном направлении.Есть ли что-то кроме 'сигнала (ID, функции), который я должен использовать для захвата нескольких входящих сигналов?
Если я запускаю его только с одним дочерним процессом, кажется, что он никогда не даст сбой.Поэтому я предполагаю, что это связано с каким-то расовым состоянием между детьми ... но я не смог добиться какого-либо прогресса в его отслеживании.
РЕДАКТИРОВАТЬ
После дальнейшего исследования я нашел сайты, которые рекомендовали использовать sigaction вместо сигнала ... но у меня все еще есть та же проблема.Иногда сигнал не обрабатывается мной, и это приводит к преждевременному завершению процесса.