为什么 SIGHUP 仅在 FreeBSD 中被 daemon(3) 忽略?

为什么 SIGHUP 仅在 FreeBSD 中被 daemon(3) 忽略?

作为systemd tmux daemon()Reddit 上的讨论,我注意到这只是FreeBSD版本的daemon() libc库调用忽略了SIGHUP sigaction(2), 但不是开放BSD或 glibc/misc/daemon.c。为什么?

答案1

我追踪到https://svnweb.freebsd.org/base?view=revision&revision=122442https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=25462

似乎存在一些极端情况SIGHUP signal交付时daemon()库调用做了一个fork(2)随后是一个_exit(2)父母的,这将使hup交付(根据_exit(2))并且如果执行子进程的父进程已经是会话领导者,则将终止子进程,如中所述setsid(2)

当调用者是会话领导者时,为了避免在这些有限的情况下子进程意外终止(这种情况的完整列表在上面的 Bugzilla 中),SIGHUP暂时忽略 。

相关内容