Eugene Berdnikov <[email protected]> writes: > On Sat, Sep 12, 2015 at 06:09:07PM +0300, Eugene Berdnikov wrote: >> On Sat, Sep 12, 2015 at 04:37:59PM +0300, Yuriy M. Kaminskiy wrote: >> > Я только что нарвался на неприятный баг: на попытке перезапустить (не >> > полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном >> > делении на 0 (точнее, намерено завис в обработчике сигнала). При этом >> > systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не >> >> Ядро линукса не блокирует передачу таких сигналов процессу с pid=1. > > Оговорился. Наоборот, блокирует. :)
Каких "таких"? SIGFPE? И что бы оно должно было делать по делению на ноль? По факту, systemd этот сигнал получает, и реагирует зависанием (зовёт freeze(), внутри которого он закрывает все дескрипторы и крутиться в for(;;) pause();, см. TFS). [...] kernel: [X.X] traps: systemd[1] trap divide error ip:f772106f sp:ffabdaf4 error:0 in systemd[f765d000+130000] [...] systemd[1]: Caught <FPE>, dumped core as pid 4661. [...] systemd[1]: Freezing execution. (корку я посмотрел, backtrace идентичен #774012). Ожидаемая реакция systemd на SIGINT/SIGTERM и так далее прописана в man systemd (SIGTERM эквивалентен systemctl daemon-reexec, SIGINT эквивалентен systemctl reboot); в состоянии "намеренного зависания внутри обработчика SIGFPE" systemd ни на какие сигналы не реагирует.

