supervision - discussion about system services, daemon supervision, init, runlevel management, and tools such as s6 and runit
 help / color / mirror / Atom feed
From: "Laurent Bercot" <ska-supervision@skarnet.org>
To: "supervision@list.skarnet.org" <supervision@list.skarnet.org>
Subject: Re: how to handle system shutdown ?
Date: Fri, 03 May 2019 19:25:47 +0000	[thread overview]
Message-ID: <emd3f4cc88-065f-47f0-b1a6-88cd5fca2e45@elzian> (raw)
In-Reply-To: <20616231556847420@myt3-2475c4d2af83.qloud-c.yandex.net>

>but one can do without it and call the shutdown script by hand
>which in the end does the reboot(2) call itself, thats perfectly
>possible and the classical BSD way, so process #1 does not even
>need to do the system shutdown itself.

  That's relying on a behaviour that Linux implements, and possibly
BSD too, but that is not specified in POSIX: that the process
that does a kill(-1, signal) is not affected by the kill() call.

  Before the reboot(2) system call, at some point you need to
kill all processes ("kill -9 -1") so you can unmount filesystems
and *then* call reboot(2).

  With the extended behaviour, the process that performs the kill -9 -1
survives, and can then go on to "stage 4", i.e. unmounting everything
and telling the hardware to halt/reboot. But that is not POSIX.
POSIX specifies that the kill signal will be sent to all processes
"excluding an unspecified set of system processes". pid 1 is naturally
part of those "system processes", but a shell, or a program that
performs the shutdown sequence, with a random pid, cannot be.

  The only ways to perform a proper shutdown sequence that strictly
conforms to POSIX are:
  - do it in pid 1
  - do it *under a supervision tree*. When the shutdown sequence kills
everything, it may also kill itself; if it is the case, it is restarted
by the supervision tree, and can then go on to stage 4.

  The shutdown sequence generated by the current s6-linux-init-maker
does the former. The shutdown sequence in the upcoming s6-linux-init
performs the latter.

  It is not strictly necessary to do so on Linux, and apparently on
BSD either, since those systems ensure the survival of the process
sending the big nuke. But you need to be aware of this implementation
detail before advertising the "classical BSD way". :)

--
  Laurent



  reply	other threads:[~2019-05-03 19:25 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-29 19:19 interesting claims Jeff
2019-04-30  2:49 ` Guillermo
2019-04-30  8:22 ` Laurent Bercot
2019-05-03  0:53   ` what init systems do you use ? Jeff
2019-05-11 18:45     ` Guillermo
2019-05-13 19:13     ` multiplexd
2019-05-13 20:36       ` Laurent Bercot
2019-05-13 21:09       ` Steve Litt
2019-05-14  2:34         ` Guillermo
2019-05-13 21:16       ` Joshua Ismael Haase Hernández
2019-05-14  5:50     ` Colin Booth
2019-05-14  7:15       ` eric vidal
2019-04-30  8:47 ` interesting claims Jonathan de Boyne Pollard
2019-05-01  7:26 ` Steve Litt
2019-05-01  7:33 ` Steve Litt
2019-05-01 18:13   ` Laurent Bercot
2019-05-15 17:22     ` Steve Litt
2019-05-15 23:22       ` Oliver Schad
2019-05-16  1:07         ` Steve Litt
2019-05-16  5:36           ` fungal-net
2019-05-16  8:32             ` Laurent Bercot
2019-05-16 17:10               ` Jeff
2019-05-17  0:23               ` Dewayne Geraghty
2019-05-17 11:21               ` fungal-net
2019-05-17 22:57                 ` Guillermo
2019-05-18  0:52                   ` Jeff
2019-05-18 16:26                     ` fungal-net
2019-05-18 20:04                       ` Guillermo
2019-05-19 11:24                         ` fungal-net
2019-05-19 12:57                           ` killall test run Jeff
2019-05-19 17:29                             ` Colin Booth
2019-05-19 20:39                             ` Guillermo
2019-05-19 23:06                               ` Laurent Bercot
2019-05-19 20:35                           ` interesting claims Guillermo
2019-05-03  1:37   ` how to handle system shutdown ? Jeff
2019-05-03 19:25     ` Laurent Bercot [this message]
2019-05-05  0:52       ` is it required to call kill() from process #1 ? Jeff

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=emd3f4cc88-065f-47f0-b1a6-88cd5fca2e45@elzian \
    --to=ska-supervision@skarnet.org \
    --cc=supervision@list.skarnet.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).