TL; DR : вы сигнализируете о другом процессе, отличном от того, который вы думаете.
В комментариях вы упоминаете, что пытаетесь передать SIGINT
своему процессу, набравCTRL-C на клавиатуре.Это нормально, если вы хотите убить группу процессов переднего плана терминала, а затем владеть клавиатурой.Предположим, что вы запускаете вашу программу из окна оболочки, и она ничего не делает, чтобы поместить себя в фоновый режим, начальный процесс действительно будет в группе процессов переднего плана, и если вы никогда не наберете fork()
, то ничего, что вы делаете, не изменится, покапроцесс завершается.Поэтому, нажав CTRL-C в этом терминале, вы получите SIGINT
для этого процесса.
ОДНАКО, когда начальный процесс умирает, оболочка, запустившая его, возвращается на передний план.Вы можете проверить это, набрав команды к нему.Более того, в случае, когда начальный процесс успешно fork()
является дочерним, дочерний процесс и его группа процессов переходят в фоновый режим, когда оболочка ставит себя на передний план. В этот момент любой введенный вами CTRL-C отправляется в оболочку (которая его игнорирует), а не в дочерний процесс вашего веб-сервера.
Вы можете отправить SIGINT
напроцесс выполняется в фоновом режиме или без управляющего терминала с помощью команды kill
, например
kill -INT 12345
Если вы используете этот метод для доставки SIGINT
дочернему процессу в вашем случае fork
ing, вы увидите, что зарегистрированный обработчик сигнала процесса перехватывает и обрабатывает сигнал именно так, как и должен.