Давайте рассмотрим эту строку за строкой. Установите обработчик сигнала, затем форк. Ребенок печатает «Призрак» и выходит. Родитель заставляет ребенка распечатать «Призрак» и выйти. Затем родитель печатает «ниндзя».
Итак, у вас действительно есть состояние гонки. Если родитель запускает свой SIGUSR1
до того, как ребенок напечатает «Призрак», тогда вы получите Phantom Ninja
или, возможно, Ninja Phantom
(уничтожить блок?)
Но, если вы не можете вовремя отключить сигнал, тогда вы получите Ghost Ninja
, когда ребенок заканчивает работу, прежде чем родительский сигнал подаст сигнал. Я не думаю, что обратное возможно.
Теперь вполне возможно, что сигнал может быть точно по времени, чтобы попасть между printf
и exit
, в этом случае Ghost
закончится, затем Phantom
затем Ninja
- или снова наоборот, я думаю.
Это действительно привередливый и чувствительный к времени ОС.
@ Все - не проверено! Не стесняйтесь мне противоречить, но мне будет интересно узнать почему, как и ОП.