Есть ли разница между сигнальным вызовом от ребенка или родителя?
С точки зрения того, как это влияет на процесс приема сигнала, нет.
Когда ребенок разветвлен, теперь он родитель, а ребенок только для предыдущего родителя?
Это определенно ребенок его родителя. Независимо от того, станет ли он сам родителем, зависит от того, развивает ли он своих собственных детей.
Поскольку обработчик включен, по умолчанию обработчик недействителен. Могли бы вы изменить SIGINT, чтобы не прекратить процесс?
По умолчанию SIGINT - это прекратить процесс, но вы можете поймать и обработать SIGINT, или вы можете заблокировать или проигнорировать его. Назначение по умолчанию не так сильно недопустимо, как переопределено до (и если) вы снова его измените.
Почему «SIGKILL received» никогда не печатается?
Вы не можете блокировать, игнорировать или улавливать SIGKILL. Вы не увидите, что ваш обработчик печатает что-либо, потому что он никогда не будет вызван для SIGKILL. SIGSTOP также нельзя игнорировать, блокировать или обрабатывать. Это два специальных сигнала в этом отношении.
В вашей программе вы пытаетесь установить SIGKILL по умолчанию, на самом деле его только, расположение у детей. Так как ваши дети немедленно выходят, сигнал от родителя никогда не может быть доставлен, потому что дети уже мертвы, а kill
в родительском элементе может быть неудачным с ESRCH, например. ни один ребенок с этим pid не существует. A sleep
было бы полезно там, чтобы они могли жить достаточно долго, чтобы их убили. (Должен любить эту терминологию.)
Ваше использование WEXITSTATUS
неверно. Если ваше намерение состоит в том, чтобы подсчитать количество детей, которые выходили по собственному желанию, а не быть убитыми, вам, вероятно, просто нужен простой счетчик, использующий WIFEXITED или WIFSIGNALED. WEXITSTATUS возвращает код состояния дочернего элемента, который вышел из него самостоятельно. Это может быть 0 или 1 или 50 или 75. Добавление его к переменной, вероятно, не является тем, что вы хотите.
Сигналы представляют собой запутанную тему, поскольку для лука есть несколько слоев, и есть достаточные исключения из правил и семантики конкретной платформы, чтобы сделать их разочаровывающими. Я никогда не нашел ни одного источника, который бы исчерпывал их. Тем не менее, расположение сигналов и обработчики являются внешним слоем лука, и в Интернете есть много источников, которые покрывают их довольно хорошо.