f8f3f9263e
This adds support for watching for process exits via Linux new pidfd concept. This makes watching processes and killing them race-free if properly used, fixing a long-standing UNIX misdesign. This patch adds implicit and explicit pidfd support to sd-event: if a process shall be watched and is specified by PID we will now internally create a pidfd for it and use that, if available. Alternatively a new constructor for child process event sources is added that takes pidfds as input. Besides mere watching of child processes via pidfd two additional features are added: → sd_event_source_send_child_signal() allows sending a signal to the process being watched in the safest way possible (wrapping the new pidfd_send_signal() syscall). → sd_event_source_set_child_process_own() allows marking a process watched for destruction as soon as the event source is freed. This is currently implemented in userspace, but hopefully will become a kernel feature eventually. Altogether this means an sd_event_source object is now a safe and stable concept for referencing processes in race-free way, with automatic fallback to pre-pidfd kernels. Note that this patch adds support for this only to sd-event, not to PID 1. That's because PID 1 needs to use waitid(P_ALL) for reaping any process that might get reparented to it. This currently semantically conflicts with pidfd use for watching processes since we P_ALL is undirected and thus might reap process earlier than the pidfd notifies process end, which is hard to handle. The kernel will likely gain a concept for excluding specific pidfds from P_ALL watching, as soon as that is around we can start making use of this in PID 1 too. |
||
---|---|---|
.. | ||
_sd-common.h | ||
meson.build | ||
sd-bus-protocol.h | ||
sd-bus-vtable.h | ||
sd-bus.h | ||
sd-daemon.h | ||
sd-device.h | ||
sd-dhcp-client.h | ||
sd-dhcp-lease.h | ||
sd-dhcp-option.h | ||
sd-dhcp-server.h | ||
sd-dhcp6-client.h | ||
sd-dhcp6-lease.h | ||
sd-event.h | ||
sd-hwdb.h | ||
sd-id128.h | ||
sd-ipv4acd.h | ||
sd-ipv4ll.h | ||
sd-journal.h | ||
sd-lldp.h | ||
sd-login.h | ||
sd-messages.h | ||
sd-ndisc.h | ||
sd-netlink.h | ||
sd-network.h | ||
sd-path.h | ||
sd-radv.h | ||
sd-resolve.h | ||
sd-utf8.h |