Enable the PR_SET_CHILD_SUBREAPER prctl(2) option on Linux.

This prctl(2) option can be used to set the "child subreaper" attribute
of the calling process.  This allows a process to take on the role of
'init', which means the process will inherit descendant processes when
their immediate parent terminates.

This will be used in an upcoming commit that uses a double fork(2) +
unshare(2) to create a new PID namespace.  The parent from the second
fork will terminate leaving the child process to be inherited by 'init'.
Aside from it being better to maintain the parent/child relationships
between the various unit processes, without setting this you need to ^C
twice to fully quit unit when running in the foreground after the double
fork.

Reviewed-by: Alejandro Colomar <alx@nginx.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
This commit is contained in:
Andrew Clayton 2022-11-30 00:13:22 +00:00
parent 3ecdd2c69c
commit d98a1b0dd7

View file

@ -102,6 +102,19 @@ nxt_feature_test="#include <sys/prctl.h>
. auto/feature
nxt_feature="prctl(PR_SET_CHILD_SUBREAPER)"
nxt_feature_name=NXT_HAVE_PR_SET_CHILD_SUBREAPER
nxt_feature_run=no
nxt_feature_incs=
nxt_feature_libs=
nxt_feature_test="#include <sys/prctl.h>
int main(void) {
return PR_SET_CHILD_SUBREAPER;
}"
. auto/feature
nxt_feature="Linux mount()"
nxt_feature_name=NXT_HAVE_LINUX_MOUNT
nxt_feature_run=no