[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: systemd в jessie умирает с SIGFPE



Eugene Berdnikov <bd4@protva.ru> 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 ни на какие сигналы
не реагирует.


Reply to: