Index · Directives · Python · libudev · gudev systemd 220

## Name

sd_event_add_signal, sd_event_source_get_signal — Add a signal event source to an event loop

## Synopsis

    #include <systemd/sd-bus.h>

`int sd_event_add_signal(` | sd_event *event,
| sd_event_source **source,
| int signal,
| sd_event_signal_handler_t handler,
| void *userdata`)`;

`typedef int (*sd_event_signal_handler_t)(` | sd_event_source *s,
| const struct signalfd_siginfo *si,
| void *userdata`)`;

`int sd_event_source_get_signal(` | sd_event_source *source`)`;

## Description

`sd_event_add_signal()` adds a new signal event source to an event loop object. The event loop is specified in `event`, the event source is returned in the `source` parameter. The `signal` parameter specifies the signal to be handled (see signal(7)). The `handler` must reference a function to call when the signal is delivered or be `NULL`. The handler function will be passed the `userdata` pointer, which may be chosen freely by the caller. The handler also receives a pointer to a const struct signalfd_siginfo containing the information about the received signal. See signalfd(2) for further information.

Only a single handler may be installed for a specific signal. The signal will be unblocked, and must be blocked when the function is called. If the handler is not specified (`handler` is `NULL`), a default handler which causes the program to exit will be used. By default, the handler is enabled permanently (`SD_EVENT_ON`), but this may be changed with sd_event_source_set_enabled(3). If the handler function returns a negative error code, it will be disabled after the invocation, even if `SD_EVENT_ON` mode is set.

`sd_event_source_get_signal()` retrieves the configured signal number of a signal event source created previously with `sd_event_add_signal()`. It takes the event source object as the `source` parameter.

## Return Value

On success, these functions return 0 or a positive integer. On failure, they return a negative errno-style error code.

## Errors

Returned errors may indicate the following problems:

`-ENOMEM`

  Not enough memory to allocate an object.

`-EINVAL`

  An invalid argument has been passed.

`-EBUSY`

  An handler is already installed for this signal or the signal was not blocked previously.

`-ESTALE`

  The event loop is already terminated.

`-ECHILD`

  The event loop has been created in a different process.

## Notes

`sd_event_add_signal()` and the other functions described here are available as a shared library, which can be compiled and linked to with the `libsystemd` pkg-config(1) file.

## See Also

systemd(1), sd-event(3), sd_event_new(3), sd_event_add_time(3), sd_event_add_child(3), sd_event_add_defer(3), sd_event_source_set_enabled(3)