vorner / signal-hook

Rust library allowing to register multiple handlers for the same signal

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Receive unexpected signal on MacOS Big Sur 11.4(Apple M1)

tubzby opened this issue · comments

version: 0.3.9

in main entry:

    let mut signals = Signals::new(&[SIGINT, SIGTERM]);
    thread::spawn(move || {
        for sig in &mut signals {
            error!("receive signal:{:?} ", sig);
            process::exit(0);
        }
    });

As soon as I start the program, it receive a signal and quit program with output:

[2021-07-09T00:57:56Z ERROR modbus_test] receive signal:Signals(SignalDelivery { read: UnixStream { fd: 3, local: (unnamed), peer: (unnamed) }, handle: Handle { pending: PendingSignals { exfiltrator: SignalOnly, slots: [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] }, write: UnixStream { fd: 4, local: (unnamed), peer: (unnamed) }, delivery_state: DeliveryState { closed: false, registered_signal_ids: Mutex { data: [None, None, Some(SigId { signal: 2, action: ActionId(1) }), None, None, None, None, None, None, None, None, None, None, None, None, Some(SigId { signal: 15, action: ActionId(2) }), None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None], poisoned: false, .. } } }, pending: PendingSignals { exfiltrator: SignalOnly, slots: [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false] } })

Hello

This seems suspicious. This thing printed here is not one signal, but the whole Signals iterator. I suspect your signals variable is of type Result<Signals, _> and you're iterating oven the result.

Notice the example here uses the question mark to propagate the error (at the Signals::new).