作为systemd
tmux
daemon()
Reddit 上的讨论,我注意到这只是FreeBSD版本的daemon()
libc
库调用忽略了SIGHUP
sigaction(2)
, 但不是开放BSD或 glibc/misc/daemon.c。为什么?
答案1
我追踪到https://svnweb.freebsd.org/base?view=revision&revision=122442和https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=25462。
似乎存在一些极端情况SIGHUP
signal
交付时daemon()
库调用做了一个fork(2)
随后是一个_exit(2)
父母的,这将使hup
交付(根据_exit(2)
)并且如果执行子进程的父进程已经是会话领导者,则将终止子进程,如中所述setsid(2)
。
当调用者是会话领导者时,为了避免在这些有限的情况下子进程意外终止(这种情况的完整列表在上面的 Bugzilla 中),SIGHUP
暂时忽略 。