Hi! Ludovic Courtès skribis: > Turns out that this happens when calling the ‘daemonize’ action on > ‘root’. I have a reproducer now and am investigating… Good news: this is fixed in Shepherd commit f4272d2f0f393d2aa3e9d76b36ab6aa5f2fc72c2! The root cause is inconsistent semantics when mixing epoll, signalfd, and fork, specifically this part from signalfd(2): epoll(7) semantics If a process adds (via epoll_ctl(2)) a signalfd file descriptor to an epoll(7) instance, then epoll_wait(2) returns events only for signals sent to that process. In particular, if the process then uses fork(2) to create a child process, then the child will be able to read(2) sig‐ nals that are sent to it using the signalfd file descriptor, but epoll_wait(2) will not indicate that the signalfd file descriptor is ready. In this scenario, a possible workaround is that after the fork(2), the child process can close the signalfd file descriptor that it inherited from the parent process and then create another signalfd file descriptor and add it to the epoll instance. […] The C program below illustrates this behavior: