chiark / gitweb /
manager: Do not handle SIGKILL since we can not
authorChengwei Yang <chengwei.yang@intel.com>
Mon, 20 May 2013 07:22:27 +0000 (15:22 +0800)
committerLennart Poettering <lennart@poettering.net>
Thu, 6 Jun 2013 06:58:58 +0000 (08:58 +0200)
commit1cce5d639cdcb3b237e2eda3c36782f98ff23b46
tree051112836fd8cfa17b942204a94f12c51767056a
parent4a4c0be0ab713410ab65bb6bd0c0702abd9e9f4c
manager: Do not handle SIGKILL since we can not

This is a minor fix because it's not a major issue, this fix just avoid
to get EINVAL error from sigaction(2).

There are two signals can not handled at user space, SIGKILL and
SIGSTOP even we're PID 1, trying to handle these two signals will get
EINVAL error.

There are two kinds of systemd instance, running as system manager or
user session manager, apparently, the latter is a general user space
process which can not handle SIGKILL. The special pid 1 also can not
do that refer to kernel/signal.c:do_sigaction().

However, pid 1 is unkillable because the kernel did attach
SIGNAL_UNKILLABLE to it at system boot up, refer to
init/main.c:start_kernel()
    --> rest_init()
        --> kernel_thread()
            --> kernel_init()
                --> init_post()
                    current->signal->flags |= SIGNAL_UNKILLABLE
src/core/main.c
src/shared/def.h