What is the difference between “init” and “service manager”?
Clash Royale CLAN TAG#URR8PPP
From When the operating system shuts down, how does a service manager know that it should sends SIGTERM and SIGKILL to its services?
systemd IS BOTH the init and service manager
What is the difference between "init" and "service manager"?
I guess they are the same thing?
What is some example which is "the init" but not "service manager"? Vice versa?
Thanks.
linux systemd services init sysvinit
add a comment |
From When the operating system shuts down, how does a service manager know that it should sends SIGTERM and SIGKILL to its services?
systemd IS BOTH the init and service manager
What is the difference between "init" and "service manager"?
I guess they are the same thing?
What is some example which is "the init" but not "service manager"? Vice versa?
Thanks.
linux systemd services init sysvinit
add a comment |
From When the operating system shuts down, how does a service manager know that it should sends SIGTERM and SIGKILL to its services?
systemd IS BOTH the init and service manager
What is the difference between "init" and "service manager"?
I guess they are the same thing?
What is some example which is "the init" but not "service manager"? Vice versa?
Thanks.
linux systemd services init sysvinit
From When the operating system shuts down, how does a service manager know that it should sends SIGTERM and SIGKILL to its services?
systemd IS BOTH the init and service manager
What is the difference between "init" and "service manager"?
I guess they are the same thing?
What is some example which is "the init" but not "service manager"? Vice versa?
Thanks.
linux systemd services init sysvinit
linux systemd services init sysvinit
asked Dec 18 at 18:48
Tim
26k74246455
26k74246455
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
init
is (usually) the first process started by the system. It has a couple of special responsibilities, including (but not limited to:
- Starting whatever other userspace processes are necessary to finish the boot up process.
- Handling the final shutdown of the system (
init
is what ultimately tells the kernel to power off or reboot once everything in userspace is shut down). - Adopting orphaned processes (processes which no longer have a running parent process) and cleaning up after them.
A service manager, on the other hand, is solely responsible for ensuring a given set of services are running, and optionally that they keep running. The exact approach to this can vary from rudimentary scripts that just track dependencies among services, to complex systems that automatically manage dependencies.
The original SVR4 init
implementation (which is the basis for both the classic systemv-init
packages on most Linux distributions, the Busybox init
applet, and the BSD and Solaris init
programs) actually included rudimentary service management. It let you define programs which it would automatically start at boot, and restart if they exited. As a result of this, it's actually pretty hard to find an init
implementation on a UNIX-like system that isn't also a rudimentary service manager, and this baseline level of service management is largely implied to be part of the init
process's job.
On the other hand, you can easily have a service manager that isn't an init
implementation. The classic BSD rc.d
scripts are an example of a really simple service manager (they handle starting and stopping services, and provide rudimentary dependency management), and they formed the basis of the concept of /etc/init.d
on Linux. A more complex example is monit, which adds state tracking, automatic restart capabilities, alerting, and some system monitoring support to the basic functionality.
1
This is significantly wrong on many points. Reaping orphaned children is nowadays done with subreapers, unix.stackexchange.com/a/177361/5132 . Startup and shutdown are not necessarily the task of process #1, unix.stackexchange.com/a/197472/5132 . BSDinit
is not in any way derived from System 5init
. System 5init
was not the original of this design, that being System 3init
. The Mewburnrc.d
system was invented years after the van Smoorenburginit.d
system and cannot have formed its basis. And monit is not a service manager.
– JdeBP
Dec 19 at 12:48
Subreapers are only widely used on Linux by systemd and containers, which is nowhere near everything; startup and shutdown are consistently the task of PID 1 on all major Linux distributions today with the notable exception of booting directly into a shell; I wasn't referring to SVR4 init as the original init implementation, but referring to the original implementation done for SVR4 as it was the basis for most other implementations; the/etc/init.d/
setup on Linux is not entirely consistent with the van Smoorenburg system, and monit does do service management (among other things).
– Austin Hemmelgarn
Dec 19 at 13:34
Also, if you're able to come up with a better answer yourself, you're free to do so.
– Austin Hemmelgarn
Dec 19 at 13:35
I already did. You have even more stuff wrong. Theinit.d
setup on Linux is the van Smoorenburg system (unless replaced with OpenRC), where shutdown is not in process 1. I've already pointed you to details of the several softwares other than systemd, including the system that preceded it, that use subreapers. The System 5 Release 4init
wasn't the basis for other systems at all. BSDinit
has a direct lineage that predates its existence, for starters; and it wasn't even the basis for the van Smoorenburg system because van Smoorenburg never cloned the stuff that was in Release 4.
– JdeBP
Dec 19 at 15:54
add a comment |
init
is the conventional name of the program that runs in process #1. It has taken many forms over the years, and the tasks that init
programs have performed have significantly varied. Confusingly, it is also the name of a command that administrators use to communicate with process #1. They are best regarded as two separate things, and were certainly documented that way in AT&T Unix, even if they are in some softwares all mixed up in one program that behaves differently according to what process ID it finds that it has. Further confusingly, there can be multiple different programs run by process #1 in the lifetime of a system, at least two of which (in the case of Linux systems with an initramfs) are named init
(/init
in the initramfs and /sbin/init
in the eventual root filesystem, conventionally chained-to by the former).
A service manager is a program that manages services, as the name says. It does not have to be run as process #1, and in fact, over the broad spectrum of operating system softwares over the years, generally has not been process #1. Service managers range from Gerrit Pape's runsv
through Laurent Bercot's s6-supervise
to the imaginatively named service-manager
in my nosh tooset. They also encompass the Service Access Facility of AT&T Unix System 5 Release 4, the System Resource Controller of IBM AIX 3.1, and the Service Management Facility of Solaris. They spawn service programs from a uniform, consistent, known context, and provide mechanisms for those services to be controlled (brought up, terminated and restarted, and taken down) and their statuses to be queried by the rest of the system.
A system manager is a program that manages the system, dealing in system state changes. It generally is run as process #1. This is in part because the kernel of the operating system treats it specially, sending it information about system state change requests, such as power failure events or special key chords on the kernel virtual terminal's keyboard device(s) (e.g. on Linux
⇮+↑ generating SIGWINCH
or ⎈+⎇+⌦ generating SIGINT
to process #1). It also deals in setting up the initial system state at bootstrap, and sometimes in finalizing the system state at shutdown.
The details of system state vary from software to software. The van Smoorenburg init
operated in terms of the (now passé) run-levels. BSD init
's state machine is entirely internal and has states such as running /etc/rc
, multi-user, and single user.
Case studies:
systemd
is a process #1 program. It performs both service management and system management in one program, running as that process. However, it does not deal in finalizing the system state, instead chain loading process #1 to a different program namedsystemd-shutdown
for that. System state changes generally take the form of the service manager starting/stopping targets which in turn cause the start/stop of services. Several services, such asemergency.service
andsystemd-halt.service
for examples, when activated themselves runsystemctl
which sends commands back to process #1, for making further system state changes. Shutdown is a two-state sequence, in this design.- The imaginatively named
system-manager
in my nosh tooset is a process #1 program that only does the system manager rôle. It does the initialization at bootstrap and the finalization at shutdown. It manages the system by spawning the (system-wide) service manager as another process and various invocations of thesystem-control
program in response to events. (TheSIGINT
resulting from the ⎈+⎇+⌦ chord on the KVT keyboard causes it to spawn a child process to runsystem-control start secure-attention-key
, for example.)system-control
issues commands to the service manager to start and stop services and targets. Similarly, several services/targets invokesystem-control
to send commands back to the system manager so that upon their activation further system state changes are requested. Service processes are grandchildren of process #1. runit
is a process #1 program that also does only the system management. It spawns the service manager as other processes. This is done in what runit people call "stage 2", by invoking a shell script that in turn chain loadsrunsvdir
which in turn spawns the severalrunsv
programs as grandchild processes of process #1. Service processes are great-grandchildren of process #1. System management takes a "just run three shell scripts" approach, triggered by a combination of signals and flag files.- System 5
init
was a process #1 program that only did the system management. It had the aforementioned run-levels as its system states, and in theory could be a service manager as well. In reality, its service management capabilities were so feature poor that after a few years they were not even used for TUI login service management any more. It spawned (far more functional) service managers as child processes, in the forms of the aforementioned SAF and SRC.By 1990 the number of run-levels in use shrank to 1, yielding much the same design in actual operation as the nosh
system-manager
all of these decades later, with process #1 largely just spawning a service manager child process and further child processes to run commands in response to kernel events and administrator commands. Service processes are great-grandchildren of process #1, grand-children and children of the various service manager processes. (A TUI login service process is spawned by thettymon
process, itself spawned from thesac
process, spawned by process #1, for example.) - van Smoorenburg
init
is like System 3init
and System 5init
were in the few years before the advent of the aforementioned service managers in Unix. It is a process #1 program that performs the system manager rôle and that also manages some services (albeit in the same feature poor way, not allowing fine grained control of starting/stopping individual services, as System 5init
). Service management, if it is done at all (rather than just forking off service programs and largely forgetting about them), is done by other programs in child processes.In contrast to both
systemd
and the nosh toolset'ssystem-manager
it leaves some system management actions to programs running in child processes. Whereas bothsystemd
andsystem-manager
perform the final act of system poweroff/restart/halt (making the appropriate system call to the kernel) in process #1 (albeit in another program in the systemd case), in the van Smoorenburg system these are performed in child processes invoked viarc
. For example: The final system call that enacts halting the system is performed via ahalt
shell script run as a child process ofrc
(itself a child of process #1) that in turn runs thehalt
program (as a great-grandchild of process #1) that actually makes the system call.
Further reading
- Jonathan de Boyne Pollard (2018). The Unix Service Access Facility. Frequently Given Answers.
- Jonathan de Boyne Pollard (2015).
/etc/inittab
is a thing of the past.. Frequently Given Answers. - Jonathan de Boyne Pollard (2018). run-levels are things of the past.. Frequently Given Answers.
- Jonathan de Boyne Pollard (2018).
getty
spawned frominit
is a thing of the past.. Frequently Given Answers. - Linux - IPC with init
- What exactly does init do?
- What is the difference between these commands for bringing down a Linux server?
- https://retrocomputing.stackexchange.com/a/8290/1932
Thanks. Which case is sysvinit?
– Tim
Dec 19 at 21:54
sysvinit
is van Smoorenburginit
.
– Stephen Kitt
Dec 21 at 12:27
add a comment |
It is a very good question, and not one that can be answered quickly. My answer comes in complement of JdeBP's.
When we talk about an "init system", we are really talking about 4 different things, see below. This is a confusing domain, because few people have really taken the time to separate the involved concepts - and even those who have sometimes disagree on the terminology! :-)
For instance, what Jonathan calls a service manager, I call a process supervision system, because it manages processes, not services. More accurately, it provides an abstraction ("services", although it only covers longrun services, i.e. services that are implemented via a daemon) while hiding the implementation of that abstraction (processes), so that users can address services instead of processes.
And what Jonathan calls a system manager, I call a service manager, because it's actually a tool that starts and stops services, so it arguably manages them - but it's the tool that handles the global state of the machine, so the "system manager" terminology also makes sense. Even though I'd prefer machine state manager. Anyway, we should really get to a consensus about the terms, that would tremendously help reduce confusion.
So, what is an init system? It's really 4 things:
- The first program that is run when your machine boots. Traditionally, it's named
/sbin/init
, and that's the terminology I use when addressing this program. - The long-lived program that runs as pid 1 during most of the lifetime of the machine. It may or may not be the same program as
/sbin/init
, because/sbin/init
may exec into other programs. For sysvinit, or systemd, pid 1 is/sbin/init
. For an s6-based system, it isn't. - A process supervision system. This is basically a system that restarts daemons when they die, plus tools to address the current incarnation of the daemon no matter what pid it has. It is necessary for an init system to have this for at least one process, because if it doesn't, then all processes on the system (save pid 1) could die and the machine would become unusable and require a reboot from console.
- A machine state manager (to avoid ambiguous terminology). This is the software that brings your machine state from "everything is down" to "all the services I want are up", and that can also change the set of running services while your machine is running, and trigger a shutdown.
Those are the 4 important parts of an init system. So, how do existing init systems work?
- sysvinit provides
/sbin/init
, pid 1, a very rudimentary supervision system (implemented via lines in/etc/inittab
), and no machine state manager. Distributions using sysvinit generally use sysv-rc (the traditional bunch of shell scripts) or OpenRC as machine state manager. - OpenRC is a machine state manager. Recent versions of it also provide a rudimentary supervision system. But it does not provide
/sbin/init
or pid 1: OpenRC is not an init system per se. - systemd provides all 4 elements, in a single process. So, yes, systemd is both "the init" (which could mean
/sbin/init
or pid 1 or both) and "the service manager", whether "service manager" means supervision system or machine state manager. - All the daemontools-like approaches are essentially supervision systems. runit also provides a
/sbin/init
and pid 1. s6 provides a pid 1, but no/sbin/init
, but the s6-linux-init package provides a/sbin/init
. Those approaches do not provide a machine state manager, but s6 provides hooks for such managers and two have been written: s6-rc and anopa.
nosh provides all 4 elements, in separate processes. Jonathan will be able to talk about it much better than I would. :-)- When you look at any other init system (busybox init, BSD init, launchd, other approaches like Epoch, etc.) it is a good idea to wonder: what elements does this init provide? what is it lacking?
I have a 15-minute video explaining what I can only sum up briefly in this post, as well as a bigger deck of slides diving deep into the workings of an init system. All of it is available at the FOSDEM 2017 archive. Please feel free to explore. If you are interested in these things, we talk about them on the supervision mailing-list.
Enjoy,
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f489742%2fwhat-is-the-difference-between-init-and-service-manager%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
init
is (usually) the first process started by the system. It has a couple of special responsibilities, including (but not limited to:
- Starting whatever other userspace processes are necessary to finish the boot up process.
- Handling the final shutdown of the system (
init
is what ultimately tells the kernel to power off or reboot once everything in userspace is shut down). - Adopting orphaned processes (processes which no longer have a running parent process) and cleaning up after them.
A service manager, on the other hand, is solely responsible for ensuring a given set of services are running, and optionally that they keep running. The exact approach to this can vary from rudimentary scripts that just track dependencies among services, to complex systems that automatically manage dependencies.
The original SVR4 init
implementation (which is the basis for both the classic systemv-init
packages on most Linux distributions, the Busybox init
applet, and the BSD and Solaris init
programs) actually included rudimentary service management. It let you define programs which it would automatically start at boot, and restart if they exited. As a result of this, it's actually pretty hard to find an init
implementation on a UNIX-like system that isn't also a rudimentary service manager, and this baseline level of service management is largely implied to be part of the init
process's job.
On the other hand, you can easily have a service manager that isn't an init
implementation. The classic BSD rc.d
scripts are an example of a really simple service manager (they handle starting and stopping services, and provide rudimentary dependency management), and they formed the basis of the concept of /etc/init.d
on Linux. A more complex example is monit, which adds state tracking, automatic restart capabilities, alerting, and some system monitoring support to the basic functionality.
1
This is significantly wrong on many points. Reaping orphaned children is nowadays done with subreapers, unix.stackexchange.com/a/177361/5132 . Startup and shutdown are not necessarily the task of process #1, unix.stackexchange.com/a/197472/5132 . BSDinit
is not in any way derived from System 5init
. System 5init
was not the original of this design, that being System 3init
. The Mewburnrc.d
system was invented years after the van Smoorenburginit.d
system and cannot have formed its basis. And monit is not a service manager.
– JdeBP
Dec 19 at 12:48
Subreapers are only widely used on Linux by systemd and containers, which is nowhere near everything; startup and shutdown are consistently the task of PID 1 on all major Linux distributions today with the notable exception of booting directly into a shell; I wasn't referring to SVR4 init as the original init implementation, but referring to the original implementation done for SVR4 as it was the basis for most other implementations; the/etc/init.d/
setup on Linux is not entirely consistent with the van Smoorenburg system, and monit does do service management (among other things).
– Austin Hemmelgarn
Dec 19 at 13:34
Also, if you're able to come up with a better answer yourself, you're free to do so.
– Austin Hemmelgarn
Dec 19 at 13:35
I already did. You have even more stuff wrong. Theinit.d
setup on Linux is the van Smoorenburg system (unless replaced with OpenRC), where shutdown is not in process 1. I've already pointed you to details of the several softwares other than systemd, including the system that preceded it, that use subreapers. The System 5 Release 4init
wasn't the basis for other systems at all. BSDinit
has a direct lineage that predates its existence, for starters; and it wasn't even the basis for the van Smoorenburg system because van Smoorenburg never cloned the stuff that was in Release 4.
– JdeBP
Dec 19 at 15:54
add a comment |
init
is (usually) the first process started by the system. It has a couple of special responsibilities, including (but not limited to:
- Starting whatever other userspace processes are necessary to finish the boot up process.
- Handling the final shutdown of the system (
init
is what ultimately tells the kernel to power off or reboot once everything in userspace is shut down). - Adopting orphaned processes (processes which no longer have a running parent process) and cleaning up after them.
A service manager, on the other hand, is solely responsible for ensuring a given set of services are running, and optionally that they keep running. The exact approach to this can vary from rudimentary scripts that just track dependencies among services, to complex systems that automatically manage dependencies.
The original SVR4 init
implementation (which is the basis for both the classic systemv-init
packages on most Linux distributions, the Busybox init
applet, and the BSD and Solaris init
programs) actually included rudimentary service management. It let you define programs which it would automatically start at boot, and restart if they exited. As a result of this, it's actually pretty hard to find an init
implementation on a UNIX-like system that isn't also a rudimentary service manager, and this baseline level of service management is largely implied to be part of the init
process's job.
On the other hand, you can easily have a service manager that isn't an init
implementation. The classic BSD rc.d
scripts are an example of a really simple service manager (they handle starting and stopping services, and provide rudimentary dependency management), and they formed the basis of the concept of /etc/init.d
on Linux. A more complex example is monit, which adds state tracking, automatic restart capabilities, alerting, and some system monitoring support to the basic functionality.
1
This is significantly wrong on many points. Reaping orphaned children is nowadays done with subreapers, unix.stackexchange.com/a/177361/5132 . Startup and shutdown are not necessarily the task of process #1, unix.stackexchange.com/a/197472/5132 . BSDinit
is not in any way derived from System 5init
. System 5init
was not the original of this design, that being System 3init
. The Mewburnrc.d
system was invented years after the van Smoorenburginit.d
system and cannot have formed its basis. And monit is not a service manager.
– JdeBP
Dec 19 at 12:48
Subreapers are only widely used on Linux by systemd and containers, which is nowhere near everything; startup and shutdown are consistently the task of PID 1 on all major Linux distributions today with the notable exception of booting directly into a shell; I wasn't referring to SVR4 init as the original init implementation, but referring to the original implementation done for SVR4 as it was the basis for most other implementations; the/etc/init.d/
setup on Linux is not entirely consistent with the van Smoorenburg system, and monit does do service management (among other things).
– Austin Hemmelgarn
Dec 19 at 13:34
Also, if you're able to come up with a better answer yourself, you're free to do so.
– Austin Hemmelgarn
Dec 19 at 13:35
I already did. You have even more stuff wrong. Theinit.d
setup on Linux is the van Smoorenburg system (unless replaced with OpenRC), where shutdown is not in process 1. I've already pointed you to details of the several softwares other than systemd, including the system that preceded it, that use subreapers. The System 5 Release 4init
wasn't the basis for other systems at all. BSDinit
has a direct lineage that predates its existence, for starters; and it wasn't even the basis for the van Smoorenburg system because van Smoorenburg never cloned the stuff that was in Release 4.
– JdeBP
Dec 19 at 15:54
add a comment |
init
is (usually) the first process started by the system. It has a couple of special responsibilities, including (but not limited to:
- Starting whatever other userspace processes are necessary to finish the boot up process.
- Handling the final shutdown of the system (
init
is what ultimately tells the kernel to power off or reboot once everything in userspace is shut down). - Adopting orphaned processes (processes which no longer have a running parent process) and cleaning up after them.
A service manager, on the other hand, is solely responsible for ensuring a given set of services are running, and optionally that they keep running. The exact approach to this can vary from rudimentary scripts that just track dependencies among services, to complex systems that automatically manage dependencies.
The original SVR4 init
implementation (which is the basis for both the classic systemv-init
packages on most Linux distributions, the Busybox init
applet, and the BSD and Solaris init
programs) actually included rudimentary service management. It let you define programs which it would automatically start at boot, and restart if they exited. As a result of this, it's actually pretty hard to find an init
implementation on a UNIX-like system that isn't also a rudimentary service manager, and this baseline level of service management is largely implied to be part of the init
process's job.
On the other hand, you can easily have a service manager that isn't an init
implementation. The classic BSD rc.d
scripts are an example of a really simple service manager (they handle starting and stopping services, and provide rudimentary dependency management), and they formed the basis of the concept of /etc/init.d
on Linux. A more complex example is monit, which adds state tracking, automatic restart capabilities, alerting, and some system monitoring support to the basic functionality.
init
is (usually) the first process started by the system. It has a couple of special responsibilities, including (but not limited to:
- Starting whatever other userspace processes are necessary to finish the boot up process.
- Handling the final shutdown of the system (
init
is what ultimately tells the kernel to power off or reboot once everything in userspace is shut down). - Adopting orphaned processes (processes which no longer have a running parent process) and cleaning up after them.
A service manager, on the other hand, is solely responsible for ensuring a given set of services are running, and optionally that they keep running. The exact approach to this can vary from rudimentary scripts that just track dependencies among services, to complex systems that automatically manage dependencies.
The original SVR4 init
implementation (which is the basis for both the classic systemv-init
packages on most Linux distributions, the Busybox init
applet, and the BSD and Solaris init
programs) actually included rudimentary service management. It let you define programs which it would automatically start at boot, and restart if they exited. As a result of this, it's actually pretty hard to find an init
implementation on a UNIX-like system that isn't also a rudimentary service manager, and this baseline level of service management is largely implied to be part of the init
process's job.
On the other hand, you can easily have a service manager that isn't an init
implementation. The classic BSD rc.d
scripts are an example of a really simple service manager (they handle starting and stopping services, and provide rudimentary dependency management), and they formed the basis of the concept of /etc/init.d
on Linux. A more complex example is monit, which adds state tracking, automatic restart capabilities, alerting, and some system monitoring support to the basic functionality.
answered Dec 18 at 20:23
Austin Hemmelgarn
5,98111016
5,98111016
1
This is significantly wrong on many points. Reaping orphaned children is nowadays done with subreapers, unix.stackexchange.com/a/177361/5132 . Startup and shutdown are not necessarily the task of process #1, unix.stackexchange.com/a/197472/5132 . BSDinit
is not in any way derived from System 5init
. System 5init
was not the original of this design, that being System 3init
. The Mewburnrc.d
system was invented years after the van Smoorenburginit.d
system and cannot have formed its basis. And monit is not a service manager.
– JdeBP
Dec 19 at 12:48
Subreapers are only widely used on Linux by systemd and containers, which is nowhere near everything; startup and shutdown are consistently the task of PID 1 on all major Linux distributions today with the notable exception of booting directly into a shell; I wasn't referring to SVR4 init as the original init implementation, but referring to the original implementation done for SVR4 as it was the basis for most other implementations; the/etc/init.d/
setup on Linux is not entirely consistent with the van Smoorenburg system, and monit does do service management (among other things).
– Austin Hemmelgarn
Dec 19 at 13:34
Also, if you're able to come up with a better answer yourself, you're free to do so.
– Austin Hemmelgarn
Dec 19 at 13:35
I already did. You have even more stuff wrong. Theinit.d
setup on Linux is the van Smoorenburg system (unless replaced with OpenRC), where shutdown is not in process 1. I've already pointed you to details of the several softwares other than systemd, including the system that preceded it, that use subreapers. The System 5 Release 4init
wasn't the basis for other systems at all. BSDinit
has a direct lineage that predates its existence, for starters; and it wasn't even the basis for the van Smoorenburg system because van Smoorenburg never cloned the stuff that was in Release 4.
– JdeBP
Dec 19 at 15:54
add a comment |
1
This is significantly wrong on many points. Reaping orphaned children is nowadays done with subreapers, unix.stackexchange.com/a/177361/5132 . Startup and shutdown are not necessarily the task of process #1, unix.stackexchange.com/a/197472/5132 . BSDinit
is not in any way derived from System 5init
. System 5init
was not the original of this design, that being System 3init
. The Mewburnrc.d
system was invented years after the van Smoorenburginit.d
system and cannot have formed its basis. And monit is not a service manager.
– JdeBP
Dec 19 at 12:48
Subreapers are only widely used on Linux by systemd and containers, which is nowhere near everything; startup and shutdown are consistently the task of PID 1 on all major Linux distributions today with the notable exception of booting directly into a shell; I wasn't referring to SVR4 init as the original init implementation, but referring to the original implementation done for SVR4 as it was the basis for most other implementations; the/etc/init.d/
setup on Linux is not entirely consistent with the van Smoorenburg system, and monit does do service management (among other things).
– Austin Hemmelgarn
Dec 19 at 13:34
Also, if you're able to come up with a better answer yourself, you're free to do so.
– Austin Hemmelgarn
Dec 19 at 13:35
I already did. You have even more stuff wrong. Theinit.d
setup on Linux is the van Smoorenburg system (unless replaced with OpenRC), where shutdown is not in process 1. I've already pointed you to details of the several softwares other than systemd, including the system that preceded it, that use subreapers. The System 5 Release 4init
wasn't the basis for other systems at all. BSDinit
has a direct lineage that predates its existence, for starters; and it wasn't even the basis for the van Smoorenburg system because van Smoorenburg never cloned the stuff that was in Release 4.
– JdeBP
Dec 19 at 15:54
1
1
This is significantly wrong on many points. Reaping orphaned children is nowadays done with subreapers, unix.stackexchange.com/a/177361/5132 . Startup and shutdown are not necessarily the task of process #1, unix.stackexchange.com/a/197472/5132 . BSD
init
is not in any way derived from System 5 init
. System 5 init
was not the original of this design, that being System 3 init
. The Mewburn rc.d
system was invented years after the van Smoorenburg init.d
system and cannot have formed its basis. And monit is not a service manager.– JdeBP
Dec 19 at 12:48
This is significantly wrong on many points. Reaping orphaned children is nowadays done with subreapers, unix.stackexchange.com/a/177361/5132 . Startup and shutdown are not necessarily the task of process #1, unix.stackexchange.com/a/197472/5132 . BSD
init
is not in any way derived from System 5 init
. System 5 init
was not the original of this design, that being System 3 init
. The Mewburn rc.d
system was invented years after the van Smoorenburg init.d
system and cannot have formed its basis. And monit is not a service manager.– JdeBP
Dec 19 at 12:48
Subreapers are only widely used on Linux by systemd and containers, which is nowhere near everything; startup and shutdown are consistently the task of PID 1 on all major Linux distributions today with the notable exception of booting directly into a shell; I wasn't referring to SVR4 init as the original init implementation, but referring to the original implementation done for SVR4 as it was the basis for most other implementations; the
/etc/init.d/
setup on Linux is not entirely consistent with the van Smoorenburg system, and monit does do service management (among other things).– Austin Hemmelgarn
Dec 19 at 13:34
Subreapers are only widely used on Linux by systemd and containers, which is nowhere near everything; startup and shutdown are consistently the task of PID 1 on all major Linux distributions today with the notable exception of booting directly into a shell; I wasn't referring to SVR4 init as the original init implementation, but referring to the original implementation done for SVR4 as it was the basis for most other implementations; the
/etc/init.d/
setup on Linux is not entirely consistent with the van Smoorenburg system, and monit does do service management (among other things).– Austin Hemmelgarn
Dec 19 at 13:34
Also, if you're able to come up with a better answer yourself, you're free to do so.
– Austin Hemmelgarn
Dec 19 at 13:35
Also, if you're able to come up with a better answer yourself, you're free to do so.
– Austin Hemmelgarn
Dec 19 at 13:35
I already did. You have even more stuff wrong. The
init.d
setup on Linux is the van Smoorenburg system (unless replaced with OpenRC), where shutdown is not in process 1. I've already pointed you to details of the several softwares other than systemd, including the system that preceded it, that use subreapers. The System 5 Release 4 init
wasn't the basis for other systems at all. BSD init
has a direct lineage that predates its existence, for starters; and it wasn't even the basis for the van Smoorenburg system because van Smoorenburg never cloned the stuff that was in Release 4.– JdeBP
Dec 19 at 15:54
I already did. You have even more stuff wrong. The
init.d
setup on Linux is the van Smoorenburg system (unless replaced with OpenRC), where shutdown is not in process 1. I've already pointed you to details of the several softwares other than systemd, including the system that preceded it, that use subreapers. The System 5 Release 4 init
wasn't the basis for other systems at all. BSD init
has a direct lineage that predates its existence, for starters; and it wasn't even the basis for the van Smoorenburg system because van Smoorenburg never cloned the stuff that was in Release 4.– JdeBP
Dec 19 at 15:54
add a comment |
init
is the conventional name of the program that runs in process #1. It has taken many forms over the years, and the tasks that init
programs have performed have significantly varied. Confusingly, it is also the name of a command that administrators use to communicate with process #1. They are best regarded as two separate things, and were certainly documented that way in AT&T Unix, even if they are in some softwares all mixed up in one program that behaves differently according to what process ID it finds that it has. Further confusingly, there can be multiple different programs run by process #1 in the lifetime of a system, at least two of which (in the case of Linux systems with an initramfs) are named init
(/init
in the initramfs and /sbin/init
in the eventual root filesystem, conventionally chained-to by the former).
A service manager is a program that manages services, as the name says. It does not have to be run as process #1, and in fact, over the broad spectrum of operating system softwares over the years, generally has not been process #1. Service managers range from Gerrit Pape's runsv
through Laurent Bercot's s6-supervise
to the imaginatively named service-manager
in my nosh tooset. They also encompass the Service Access Facility of AT&T Unix System 5 Release 4, the System Resource Controller of IBM AIX 3.1, and the Service Management Facility of Solaris. They spawn service programs from a uniform, consistent, known context, and provide mechanisms for those services to be controlled (brought up, terminated and restarted, and taken down) and their statuses to be queried by the rest of the system.
A system manager is a program that manages the system, dealing in system state changes. It generally is run as process #1. This is in part because the kernel of the operating system treats it specially, sending it information about system state change requests, such as power failure events or special key chords on the kernel virtual terminal's keyboard device(s) (e.g. on Linux
⇮+↑ generating SIGWINCH
or ⎈+⎇+⌦ generating SIGINT
to process #1). It also deals in setting up the initial system state at bootstrap, and sometimes in finalizing the system state at shutdown.
The details of system state vary from software to software. The van Smoorenburg init
operated in terms of the (now passé) run-levels. BSD init
's state machine is entirely internal and has states such as running /etc/rc
, multi-user, and single user.
Case studies:
systemd
is a process #1 program. It performs both service management and system management in one program, running as that process. However, it does not deal in finalizing the system state, instead chain loading process #1 to a different program namedsystemd-shutdown
for that. System state changes generally take the form of the service manager starting/stopping targets which in turn cause the start/stop of services. Several services, such asemergency.service
andsystemd-halt.service
for examples, when activated themselves runsystemctl
which sends commands back to process #1, for making further system state changes. Shutdown is a two-state sequence, in this design.- The imaginatively named
system-manager
in my nosh tooset is a process #1 program that only does the system manager rôle. It does the initialization at bootstrap and the finalization at shutdown. It manages the system by spawning the (system-wide) service manager as another process and various invocations of thesystem-control
program in response to events. (TheSIGINT
resulting from the ⎈+⎇+⌦ chord on the KVT keyboard causes it to spawn a child process to runsystem-control start secure-attention-key
, for example.)system-control
issues commands to the service manager to start and stop services and targets. Similarly, several services/targets invokesystem-control
to send commands back to the system manager so that upon their activation further system state changes are requested. Service processes are grandchildren of process #1. runit
is a process #1 program that also does only the system management. It spawns the service manager as other processes. This is done in what runit people call "stage 2", by invoking a shell script that in turn chain loadsrunsvdir
which in turn spawns the severalrunsv
programs as grandchild processes of process #1. Service processes are great-grandchildren of process #1. System management takes a "just run three shell scripts" approach, triggered by a combination of signals and flag files.- System 5
init
was a process #1 program that only did the system management. It had the aforementioned run-levels as its system states, and in theory could be a service manager as well. In reality, its service management capabilities were so feature poor that after a few years they were not even used for TUI login service management any more. It spawned (far more functional) service managers as child processes, in the forms of the aforementioned SAF and SRC.By 1990 the number of run-levels in use shrank to 1, yielding much the same design in actual operation as the nosh
system-manager
all of these decades later, with process #1 largely just spawning a service manager child process and further child processes to run commands in response to kernel events and administrator commands. Service processes are great-grandchildren of process #1, grand-children and children of the various service manager processes. (A TUI login service process is spawned by thettymon
process, itself spawned from thesac
process, spawned by process #1, for example.) - van Smoorenburg
init
is like System 3init
and System 5init
were in the few years before the advent of the aforementioned service managers in Unix. It is a process #1 program that performs the system manager rôle and that also manages some services (albeit in the same feature poor way, not allowing fine grained control of starting/stopping individual services, as System 5init
). Service management, if it is done at all (rather than just forking off service programs and largely forgetting about them), is done by other programs in child processes.In contrast to both
systemd
and the nosh toolset'ssystem-manager
it leaves some system management actions to programs running in child processes. Whereas bothsystemd
andsystem-manager
perform the final act of system poweroff/restart/halt (making the appropriate system call to the kernel) in process #1 (albeit in another program in the systemd case), in the van Smoorenburg system these are performed in child processes invoked viarc
. For example: The final system call that enacts halting the system is performed via ahalt
shell script run as a child process ofrc
(itself a child of process #1) that in turn runs thehalt
program (as a great-grandchild of process #1) that actually makes the system call.
Further reading
- Jonathan de Boyne Pollard (2018). The Unix Service Access Facility. Frequently Given Answers.
- Jonathan de Boyne Pollard (2015).
/etc/inittab
is a thing of the past.. Frequently Given Answers. - Jonathan de Boyne Pollard (2018). run-levels are things of the past.. Frequently Given Answers.
- Jonathan de Boyne Pollard (2018).
getty
spawned frominit
is a thing of the past.. Frequently Given Answers. - Linux - IPC with init
- What exactly does init do?
- What is the difference between these commands for bringing down a Linux server?
- https://retrocomputing.stackexchange.com/a/8290/1932
Thanks. Which case is sysvinit?
– Tim
Dec 19 at 21:54
sysvinit
is van Smoorenburginit
.
– Stephen Kitt
Dec 21 at 12:27
add a comment |
init
is the conventional name of the program that runs in process #1. It has taken many forms over the years, and the tasks that init
programs have performed have significantly varied. Confusingly, it is also the name of a command that administrators use to communicate with process #1. They are best regarded as two separate things, and were certainly documented that way in AT&T Unix, even if they are in some softwares all mixed up in one program that behaves differently according to what process ID it finds that it has. Further confusingly, there can be multiple different programs run by process #1 in the lifetime of a system, at least two of which (in the case of Linux systems with an initramfs) are named init
(/init
in the initramfs and /sbin/init
in the eventual root filesystem, conventionally chained-to by the former).
A service manager is a program that manages services, as the name says. It does not have to be run as process #1, and in fact, over the broad spectrum of operating system softwares over the years, generally has not been process #1. Service managers range from Gerrit Pape's runsv
through Laurent Bercot's s6-supervise
to the imaginatively named service-manager
in my nosh tooset. They also encompass the Service Access Facility of AT&T Unix System 5 Release 4, the System Resource Controller of IBM AIX 3.1, and the Service Management Facility of Solaris. They spawn service programs from a uniform, consistent, known context, and provide mechanisms for those services to be controlled (brought up, terminated and restarted, and taken down) and their statuses to be queried by the rest of the system.
A system manager is a program that manages the system, dealing in system state changes. It generally is run as process #1. This is in part because the kernel of the operating system treats it specially, sending it information about system state change requests, such as power failure events or special key chords on the kernel virtual terminal's keyboard device(s) (e.g. on Linux
⇮+↑ generating SIGWINCH
or ⎈+⎇+⌦ generating SIGINT
to process #1). It also deals in setting up the initial system state at bootstrap, and sometimes in finalizing the system state at shutdown.
The details of system state vary from software to software. The van Smoorenburg init
operated in terms of the (now passé) run-levels. BSD init
's state machine is entirely internal and has states such as running /etc/rc
, multi-user, and single user.
Case studies:
systemd
is a process #1 program. It performs both service management and system management in one program, running as that process. However, it does not deal in finalizing the system state, instead chain loading process #1 to a different program namedsystemd-shutdown
for that. System state changes generally take the form of the service manager starting/stopping targets which in turn cause the start/stop of services. Several services, such asemergency.service
andsystemd-halt.service
for examples, when activated themselves runsystemctl
which sends commands back to process #1, for making further system state changes. Shutdown is a two-state sequence, in this design.- The imaginatively named
system-manager
in my nosh tooset is a process #1 program that only does the system manager rôle. It does the initialization at bootstrap and the finalization at shutdown. It manages the system by spawning the (system-wide) service manager as another process and various invocations of thesystem-control
program in response to events. (TheSIGINT
resulting from the ⎈+⎇+⌦ chord on the KVT keyboard causes it to spawn a child process to runsystem-control start secure-attention-key
, for example.)system-control
issues commands to the service manager to start and stop services and targets. Similarly, several services/targets invokesystem-control
to send commands back to the system manager so that upon their activation further system state changes are requested. Service processes are grandchildren of process #1. runit
is a process #1 program that also does only the system management. It spawns the service manager as other processes. This is done in what runit people call "stage 2", by invoking a shell script that in turn chain loadsrunsvdir
which in turn spawns the severalrunsv
programs as grandchild processes of process #1. Service processes are great-grandchildren of process #1. System management takes a "just run three shell scripts" approach, triggered by a combination of signals and flag files.- System 5
init
was a process #1 program that only did the system management. It had the aforementioned run-levels as its system states, and in theory could be a service manager as well. In reality, its service management capabilities were so feature poor that after a few years they were not even used for TUI login service management any more. It spawned (far more functional) service managers as child processes, in the forms of the aforementioned SAF and SRC.By 1990 the number of run-levels in use shrank to 1, yielding much the same design in actual operation as the nosh
system-manager
all of these decades later, with process #1 largely just spawning a service manager child process and further child processes to run commands in response to kernel events and administrator commands. Service processes are great-grandchildren of process #1, grand-children and children of the various service manager processes. (A TUI login service process is spawned by thettymon
process, itself spawned from thesac
process, spawned by process #1, for example.) - van Smoorenburg
init
is like System 3init
and System 5init
were in the few years before the advent of the aforementioned service managers in Unix. It is a process #1 program that performs the system manager rôle and that also manages some services (albeit in the same feature poor way, not allowing fine grained control of starting/stopping individual services, as System 5init
). Service management, if it is done at all (rather than just forking off service programs and largely forgetting about them), is done by other programs in child processes.In contrast to both
systemd
and the nosh toolset'ssystem-manager
it leaves some system management actions to programs running in child processes. Whereas bothsystemd
andsystem-manager
perform the final act of system poweroff/restart/halt (making the appropriate system call to the kernel) in process #1 (albeit in another program in the systemd case), in the van Smoorenburg system these are performed in child processes invoked viarc
. For example: The final system call that enacts halting the system is performed via ahalt
shell script run as a child process ofrc
(itself a child of process #1) that in turn runs thehalt
program (as a great-grandchild of process #1) that actually makes the system call.
Further reading
- Jonathan de Boyne Pollard (2018). The Unix Service Access Facility. Frequently Given Answers.
- Jonathan de Boyne Pollard (2015).
/etc/inittab
is a thing of the past.. Frequently Given Answers. - Jonathan de Boyne Pollard (2018). run-levels are things of the past.. Frequently Given Answers.
- Jonathan de Boyne Pollard (2018).
getty
spawned frominit
is a thing of the past.. Frequently Given Answers. - Linux - IPC with init
- What exactly does init do?
- What is the difference between these commands for bringing down a Linux server?
- https://retrocomputing.stackexchange.com/a/8290/1932
Thanks. Which case is sysvinit?
– Tim
Dec 19 at 21:54
sysvinit
is van Smoorenburginit
.
– Stephen Kitt
Dec 21 at 12:27
add a comment |
init
is the conventional name of the program that runs in process #1. It has taken many forms over the years, and the tasks that init
programs have performed have significantly varied. Confusingly, it is also the name of a command that administrators use to communicate with process #1. They are best regarded as two separate things, and were certainly documented that way in AT&T Unix, even if they are in some softwares all mixed up in one program that behaves differently according to what process ID it finds that it has. Further confusingly, there can be multiple different programs run by process #1 in the lifetime of a system, at least two of which (in the case of Linux systems with an initramfs) are named init
(/init
in the initramfs and /sbin/init
in the eventual root filesystem, conventionally chained-to by the former).
A service manager is a program that manages services, as the name says. It does not have to be run as process #1, and in fact, over the broad spectrum of operating system softwares over the years, generally has not been process #1. Service managers range from Gerrit Pape's runsv
through Laurent Bercot's s6-supervise
to the imaginatively named service-manager
in my nosh tooset. They also encompass the Service Access Facility of AT&T Unix System 5 Release 4, the System Resource Controller of IBM AIX 3.1, and the Service Management Facility of Solaris. They spawn service programs from a uniform, consistent, known context, and provide mechanisms for those services to be controlled (brought up, terminated and restarted, and taken down) and their statuses to be queried by the rest of the system.
A system manager is a program that manages the system, dealing in system state changes. It generally is run as process #1. This is in part because the kernel of the operating system treats it specially, sending it information about system state change requests, such as power failure events or special key chords on the kernel virtual terminal's keyboard device(s) (e.g. on Linux
⇮+↑ generating SIGWINCH
or ⎈+⎇+⌦ generating SIGINT
to process #1). It also deals in setting up the initial system state at bootstrap, and sometimes in finalizing the system state at shutdown.
The details of system state vary from software to software. The van Smoorenburg init
operated in terms of the (now passé) run-levels. BSD init
's state machine is entirely internal and has states such as running /etc/rc
, multi-user, and single user.
Case studies:
systemd
is a process #1 program. It performs both service management and system management in one program, running as that process. However, it does not deal in finalizing the system state, instead chain loading process #1 to a different program namedsystemd-shutdown
for that. System state changes generally take the form of the service manager starting/stopping targets which in turn cause the start/stop of services. Several services, such asemergency.service
andsystemd-halt.service
for examples, when activated themselves runsystemctl
which sends commands back to process #1, for making further system state changes. Shutdown is a two-state sequence, in this design.- The imaginatively named
system-manager
in my nosh tooset is a process #1 program that only does the system manager rôle. It does the initialization at bootstrap and the finalization at shutdown. It manages the system by spawning the (system-wide) service manager as another process and various invocations of thesystem-control
program in response to events. (TheSIGINT
resulting from the ⎈+⎇+⌦ chord on the KVT keyboard causes it to spawn a child process to runsystem-control start secure-attention-key
, for example.)system-control
issues commands to the service manager to start and stop services and targets. Similarly, several services/targets invokesystem-control
to send commands back to the system manager so that upon their activation further system state changes are requested. Service processes are grandchildren of process #1. runit
is a process #1 program that also does only the system management. It spawns the service manager as other processes. This is done in what runit people call "stage 2", by invoking a shell script that in turn chain loadsrunsvdir
which in turn spawns the severalrunsv
programs as grandchild processes of process #1. Service processes are great-grandchildren of process #1. System management takes a "just run three shell scripts" approach, triggered by a combination of signals and flag files.- System 5
init
was a process #1 program that only did the system management. It had the aforementioned run-levels as its system states, and in theory could be a service manager as well. In reality, its service management capabilities were so feature poor that after a few years they were not even used for TUI login service management any more. It spawned (far more functional) service managers as child processes, in the forms of the aforementioned SAF and SRC.By 1990 the number of run-levels in use shrank to 1, yielding much the same design in actual operation as the nosh
system-manager
all of these decades later, with process #1 largely just spawning a service manager child process and further child processes to run commands in response to kernel events and administrator commands. Service processes are great-grandchildren of process #1, grand-children and children of the various service manager processes. (A TUI login service process is spawned by thettymon
process, itself spawned from thesac
process, spawned by process #1, for example.) - van Smoorenburg
init
is like System 3init
and System 5init
were in the few years before the advent of the aforementioned service managers in Unix. It is a process #1 program that performs the system manager rôle and that also manages some services (albeit in the same feature poor way, not allowing fine grained control of starting/stopping individual services, as System 5init
). Service management, if it is done at all (rather than just forking off service programs and largely forgetting about them), is done by other programs in child processes.In contrast to both
systemd
and the nosh toolset'ssystem-manager
it leaves some system management actions to programs running in child processes. Whereas bothsystemd
andsystem-manager
perform the final act of system poweroff/restart/halt (making the appropriate system call to the kernel) in process #1 (albeit in another program in the systemd case), in the van Smoorenburg system these are performed in child processes invoked viarc
. For example: The final system call that enacts halting the system is performed via ahalt
shell script run as a child process ofrc
(itself a child of process #1) that in turn runs thehalt
program (as a great-grandchild of process #1) that actually makes the system call.
Further reading
- Jonathan de Boyne Pollard (2018). The Unix Service Access Facility. Frequently Given Answers.
- Jonathan de Boyne Pollard (2015).
/etc/inittab
is a thing of the past.. Frequently Given Answers. - Jonathan de Boyne Pollard (2018). run-levels are things of the past.. Frequently Given Answers.
- Jonathan de Boyne Pollard (2018).
getty
spawned frominit
is a thing of the past.. Frequently Given Answers. - Linux - IPC with init
- What exactly does init do?
- What is the difference between these commands for bringing down a Linux server?
- https://retrocomputing.stackexchange.com/a/8290/1932
init
is the conventional name of the program that runs in process #1. It has taken many forms over the years, and the tasks that init
programs have performed have significantly varied. Confusingly, it is also the name of a command that administrators use to communicate with process #1. They are best regarded as two separate things, and were certainly documented that way in AT&T Unix, even if they are in some softwares all mixed up in one program that behaves differently according to what process ID it finds that it has. Further confusingly, there can be multiple different programs run by process #1 in the lifetime of a system, at least two of which (in the case of Linux systems with an initramfs) are named init
(/init
in the initramfs and /sbin/init
in the eventual root filesystem, conventionally chained-to by the former).
A service manager is a program that manages services, as the name says. It does not have to be run as process #1, and in fact, over the broad spectrum of operating system softwares over the years, generally has not been process #1. Service managers range from Gerrit Pape's runsv
through Laurent Bercot's s6-supervise
to the imaginatively named service-manager
in my nosh tooset. They also encompass the Service Access Facility of AT&T Unix System 5 Release 4, the System Resource Controller of IBM AIX 3.1, and the Service Management Facility of Solaris. They spawn service programs from a uniform, consistent, known context, and provide mechanisms for those services to be controlled (brought up, terminated and restarted, and taken down) and their statuses to be queried by the rest of the system.
A system manager is a program that manages the system, dealing in system state changes. It generally is run as process #1. This is in part because the kernel of the operating system treats it specially, sending it information about system state change requests, such as power failure events or special key chords on the kernel virtual terminal's keyboard device(s) (e.g. on Linux
⇮+↑ generating SIGWINCH
or ⎈+⎇+⌦ generating SIGINT
to process #1). It also deals in setting up the initial system state at bootstrap, and sometimes in finalizing the system state at shutdown.
The details of system state vary from software to software. The van Smoorenburg init
operated in terms of the (now passé) run-levels. BSD init
's state machine is entirely internal and has states such as running /etc/rc
, multi-user, and single user.
Case studies:
systemd
is a process #1 program. It performs both service management and system management in one program, running as that process. However, it does not deal in finalizing the system state, instead chain loading process #1 to a different program namedsystemd-shutdown
for that. System state changes generally take the form of the service manager starting/stopping targets which in turn cause the start/stop of services. Several services, such asemergency.service
andsystemd-halt.service
for examples, when activated themselves runsystemctl
which sends commands back to process #1, for making further system state changes. Shutdown is a two-state sequence, in this design.- The imaginatively named
system-manager
in my nosh tooset is a process #1 program that only does the system manager rôle. It does the initialization at bootstrap and the finalization at shutdown. It manages the system by spawning the (system-wide) service manager as another process and various invocations of thesystem-control
program in response to events. (TheSIGINT
resulting from the ⎈+⎇+⌦ chord on the KVT keyboard causes it to spawn a child process to runsystem-control start secure-attention-key
, for example.)system-control
issues commands to the service manager to start and stop services and targets. Similarly, several services/targets invokesystem-control
to send commands back to the system manager so that upon their activation further system state changes are requested. Service processes are grandchildren of process #1. runit
is a process #1 program that also does only the system management. It spawns the service manager as other processes. This is done in what runit people call "stage 2", by invoking a shell script that in turn chain loadsrunsvdir
which in turn spawns the severalrunsv
programs as grandchild processes of process #1. Service processes are great-grandchildren of process #1. System management takes a "just run three shell scripts" approach, triggered by a combination of signals and flag files.- System 5
init
was a process #1 program that only did the system management. It had the aforementioned run-levels as its system states, and in theory could be a service manager as well. In reality, its service management capabilities were so feature poor that after a few years they were not even used for TUI login service management any more. It spawned (far more functional) service managers as child processes, in the forms of the aforementioned SAF and SRC.By 1990 the number of run-levels in use shrank to 1, yielding much the same design in actual operation as the nosh
system-manager
all of these decades later, with process #1 largely just spawning a service manager child process and further child processes to run commands in response to kernel events and administrator commands. Service processes are great-grandchildren of process #1, grand-children and children of the various service manager processes. (A TUI login service process is spawned by thettymon
process, itself spawned from thesac
process, spawned by process #1, for example.) - van Smoorenburg
init
is like System 3init
and System 5init
were in the few years before the advent of the aforementioned service managers in Unix. It is a process #1 program that performs the system manager rôle and that also manages some services (albeit in the same feature poor way, not allowing fine grained control of starting/stopping individual services, as System 5init
). Service management, if it is done at all (rather than just forking off service programs and largely forgetting about them), is done by other programs in child processes.In contrast to both
systemd
and the nosh toolset'ssystem-manager
it leaves some system management actions to programs running in child processes. Whereas bothsystemd
andsystem-manager
perform the final act of system poweroff/restart/halt (making the appropriate system call to the kernel) in process #1 (albeit in another program in the systemd case), in the van Smoorenburg system these are performed in child processes invoked viarc
. For example: The final system call that enacts halting the system is performed via ahalt
shell script run as a child process ofrc
(itself a child of process #1) that in turn runs thehalt
program (as a great-grandchild of process #1) that actually makes the system call.
Further reading
- Jonathan de Boyne Pollard (2018). The Unix Service Access Facility. Frequently Given Answers.
- Jonathan de Boyne Pollard (2015).
/etc/inittab
is a thing of the past.. Frequently Given Answers. - Jonathan de Boyne Pollard (2018). run-levels are things of the past.. Frequently Given Answers.
- Jonathan de Boyne Pollard (2018).
getty
spawned frominit
is a thing of the past.. Frequently Given Answers. - Linux - IPC with init
- What exactly does init do?
- What is the difference between these commands for bringing down a Linux server?
- https://retrocomputing.stackexchange.com/a/8290/1932
edited Dec 21 at 12:31
answered Dec 19 at 15:50
JdeBP
33.2k468156
33.2k468156
Thanks. Which case is sysvinit?
– Tim
Dec 19 at 21:54
sysvinit
is van Smoorenburginit
.
– Stephen Kitt
Dec 21 at 12:27
add a comment |
Thanks. Which case is sysvinit?
– Tim
Dec 19 at 21:54
sysvinit
is van Smoorenburginit
.
– Stephen Kitt
Dec 21 at 12:27
Thanks. Which case is sysvinit?
– Tim
Dec 19 at 21:54
Thanks. Which case is sysvinit?
– Tim
Dec 19 at 21:54
sysvinit
is van Smoorenburg init
.– Stephen Kitt
Dec 21 at 12:27
sysvinit
is van Smoorenburg init
.– Stephen Kitt
Dec 21 at 12:27
add a comment |
It is a very good question, and not one that can be answered quickly. My answer comes in complement of JdeBP's.
When we talk about an "init system", we are really talking about 4 different things, see below. This is a confusing domain, because few people have really taken the time to separate the involved concepts - and even those who have sometimes disagree on the terminology! :-)
For instance, what Jonathan calls a service manager, I call a process supervision system, because it manages processes, not services. More accurately, it provides an abstraction ("services", although it only covers longrun services, i.e. services that are implemented via a daemon) while hiding the implementation of that abstraction (processes), so that users can address services instead of processes.
And what Jonathan calls a system manager, I call a service manager, because it's actually a tool that starts and stops services, so it arguably manages them - but it's the tool that handles the global state of the machine, so the "system manager" terminology also makes sense. Even though I'd prefer machine state manager. Anyway, we should really get to a consensus about the terms, that would tremendously help reduce confusion.
So, what is an init system? It's really 4 things:
- The first program that is run when your machine boots. Traditionally, it's named
/sbin/init
, and that's the terminology I use when addressing this program. - The long-lived program that runs as pid 1 during most of the lifetime of the machine. It may or may not be the same program as
/sbin/init
, because/sbin/init
may exec into other programs. For sysvinit, or systemd, pid 1 is/sbin/init
. For an s6-based system, it isn't. - A process supervision system. This is basically a system that restarts daemons when they die, plus tools to address the current incarnation of the daemon no matter what pid it has. It is necessary for an init system to have this for at least one process, because if it doesn't, then all processes on the system (save pid 1) could die and the machine would become unusable and require a reboot from console.
- A machine state manager (to avoid ambiguous terminology). This is the software that brings your machine state from "everything is down" to "all the services I want are up", and that can also change the set of running services while your machine is running, and trigger a shutdown.
Those are the 4 important parts of an init system. So, how do existing init systems work?
- sysvinit provides
/sbin/init
, pid 1, a very rudimentary supervision system (implemented via lines in/etc/inittab
), and no machine state manager. Distributions using sysvinit generally use sysv-rc (the traditional bunch of shell scripts) or OpenRC as machine state manager. - OpenRC is a machine state manager. Recent versions of it also provide a rudimentary supervision system. But it does not provide
/sbin/init
or pid 1: OpenRC is not an init system per se. - systemd provides all 4 elements, in a single process. So, yes, systemd is both "the init" (which could mean
/sbin/init
or pid 1 or both) and "the service manager", whether "service manager" means supervision system or machine state manager. - All the daemontools-like approaches are essentially supervision systems. runit also provides a
/sbin/init
and pid 1. s6 provides a pid 1, but no/sbin/init
, but the s6-linux-init package provides a/sbin/init
. Those approaches do not provide a machine state manager, but s6 provides hooks for such managers and two have been written: s6-rc and anopa.
nosh provides all 4 elements, in separate processes. Jonathan will be able to talk about it much better than I would. :-)- When you look at any other init system (busybox init, BSD init, launchd, other approaches like Epoch, etc.) it is a good idea to wonder: what elements does this init provide? what is it lacking?
I have a 15-minute video explaining what I can only sum up briefly in this post, as well as a bigger deck of slides diving deep into the workings of an init system. All of it is available at the FOSDEM 2017 archive. Please feel free to explore. If you are interested in these things, we talk about them on the supervision mailing-list.
Enjoy,
add a comment |
It is a very good question, and not one that can be answered quickly. My answer comes in complement of JdeBP's.
When we talk about an "init system", we are really talking about 4 different things, see below. This is a confusing domain, because few people have really taken the time to separate the involved concepts - and even those who have sometimes disagree on the terminology! :-)
For instance, what Jonathan calls a service manager, I call a process supervision system, because it manages processes, not services. More accurately, it provides an abstraction ("services", although it only covers longrun services, i.e. services that are implemented via a daemon) while hiding the implementation of that abstraction (processes), so that users can address services instead of processes.
And what Jonathan calls a system manager, I call a service manager, because it's actually a tool that starts and stops services, so it arguably manages them - but it's the tool that handles the global state of the machine, so the "system manager" terminology also makes sense. Even though I'd prefer machine state manager. Anyway, we should really get to a consensus about the terms, that would tremendously help reduce confusion.
So, what is an init system? It's really 4 things:
- The first program that is run when your machine boots. Traditionally, it's named
/sbin/init
, and that's the terminology I use when addressing this program. - The long-lived program that runs as pid 1 during most of the lifetime of the machine. It may or may not be the same program as
/sbin/init
, because/sbin/init
may exec into other programs. For sysvinit, or systemd, pid 1 is/sbin/init
. For an s6-based system, it isn't. - A process supervision system. This is basically a system that restarts daemons when they die, plus tools to address the current incarnation of the daemon no matter what pid it has. It is necessary for an init system to have this for at least one process, because if it doesn't, then all processes on the system (save pid 1) could die and the machine would become unusable and require a reboot from console.
- A machine state manager (to avoid ambiguous terminology). This is the software that brings your machine state from "everything is down" to "all the services I want are up", and that can also change the set of running services while your machine is running, and trigger a shutdown.
Those are the 4 important parts of an init system. So, how do existing init systems work?
- sysvinit provides
/sbin/init
, pid 1, a very rudimentary supervision system (implemented via lines in/etc/inittab
), and no machine state manager. Distributions using sysvinit generally use sysv-rc (the traditional bunch of shell scripts) or OpenRC as machine state manager. - OpenRC is a machine state manager. Recent versions of it also provide a rudimentary supervision system. But it does not provide
/sbin/init
or pid 1: OpenRC is not an init system per se. - systemd provides all 4 elements, in a single process. So, yes, systemd is both "the init" (which could mean
/sbin/init
or pid 1 or both) and "the service manager", whether "service manager" means supervision system or machine state manager. - All the daemontools-like approaches are essentially supervision systems. runit also provides a
/sbin/init
and pid 1. s6 provides a pid 1, but no/sbin/init
, but the s6-linux-init package provides a/sbin/init
. Those approaches do not provide a machine state manager, but s6 provides hooks for such managers and two have been written: s6-rc and anopa.
nosh provides all 4 elements, in separate processes. Jonathan will be able to talk about it much better than I would. :-)- When you look at any other init system (busybox init, BSD init, launchd, other approaches like Epoch, etc.) it is a good idea to wonder: what elements does this init provide? what is it lacking?
I have a 15-minute video explaining what I can only sum up briefly in this post, as well as a bigger deck of slides diving deep into the workings of an init system. All of it is available at the FOSDEM 2017 archive. Please feel free to explore. If you are interested in these things, we talk about them on the supervision mailing-list.
Enjoy,
add a comment |
It is a very good question, and not one that can be answered quickly. My answer comes in complement of JdeBP's.
When we talk about an "init system", we are really talking about 4 different things, see below. This is a confusing domain, because few people have really taken the time to separate the involved concepts - and even those who have sometimes disagree on the terminology! :-)
For instance, what Jonathan calls a service manager, I call a process supervision system, because it manages processes, not services. More accurately, it provides an abstraction ("services", although it only covers longrun services, i.e. services that are implemented via a daemon) while hiding the implementation of that abstraction (processes), so that users can address services instead of processes.
And what Jonathan calls a system manager, I call a service manager, because it's actually a tool that starts and stops services, so it arguably manages them - but it's the tool that handles the global state of the machine, so the "system manager" terminology also makes sense. Even though I'd prefer machine state manager. Anyway, we should really get to a consensus about the terms, that would tremendously help reduce confusion.
So, what is an init system? It's really 4 things:
- The first program that is run when your machine boots. Traditionally, it's named
/sbin/init
, and that's the terminology I use when addressing this program. - The long-lived program that runs as pid 1 during most of the lifetime of the machine. It may or may not be the same program as
/sbin/init
, because/sbin/init
may exec into other programs. For sysvinit, or systemd, pid 1 is/sbin/init
. For an s6-based system, it isn't. - A process supervision system. This is basically a system that restarts daemons when they die, plus tools to address the current incarnation of the daemon no matter what pid it has. It is necessary for an init system to have this for at least one process, because if it doesn't, then all processes on the system (save pid 1) could die and the machine would become unusable and require a reboot from console.
- A machine state manager (to avoid ambiguous terminology). This is the software that brings your machine state from "everything is down" to "all the services I want are up", and that can also change the set of running services while your machine is running, and trigger a shutdown.
Those are the 4 important parts of an init system. So, how do existing init systems work?
- sysvinit provides
/sbin/init
, pid 1, a very rudimentary supervision system (implemented via lines in/etc/inittab
), and no machine state manager. Distributions using sysvinit generally use sysv-rc (the traditional bunch of shell scripts) or OpenRC as machine state manager. - OpenRC is a machine state manager. Recent versions of it also provide a rudimentary supervision system. But it does not provide
/sbin/init
or pid 1: OpenRC is not an init system per se. - systemd provides all 4 elements, in a single process. So, yes, systemd is both "the init" (which could mean
/sbin/init
or pid 1 or both) and "the service manager", whether "service manager" means supervision system or machine state manager. - All the daemontools-like approaches are essentially supervision systems. runit also provides a
/sbin/init
and pid 1. s6 provides a pid 1, but no/sbin/init
, but the s6-linux-init package provides a/sbin/init
. Those approaches do not provide a machine state manager, but s6 provides hooks for such managers and two have been written: s6-rc and anopa.
nosh provides all 4 elements, in separate processes. Jonathan will be able to talk about it much better than I would. :-)- When you look at any other init system (busybox init, BSD init, launchd, other approaches like Epoch, etc.) it is a good idea to wonder: what elements does this init provide? what is it lacking?
I have a 15-minute video explaining what I can only sum up briefly in this post, as well as a bigger deck of slides diving deep into the workings of an init system. All of it is available at the FOSDEM 2017 archive. Please feel free to explore. If you are interested in these things, we talk about them on the supervision mailing-list.
Enjoy,
It is a very good question, and not one that can be answered quickly. My answer comes in complement of JdeBP's.
When we talk about an "init system", we are really talking about 4 different things, see below. This is a confusing domain, because few people have really taken the time to separate the involved concepts - and even those who have sometimes disagree on the terminology! :-)
For instance, what Jonathan calls a service manager, I call a process supervision system, because it manages processes, not services. More accurately, it provides an abstraction ("services", although it only covers longrun services, i.e. services that are implemented via a daemon) while hiding the implementation of that abstraction (processes), so that users can address services instead of processes.
And what Jonathan calls a system manager, I call a service manager, because it's actually a tool that starts and stops services, so it arguably manages them - but it's the tool that handles the global state of the machine, so the "system manager" terminology also makes sense. Even though I'd prefer machine state manager. Anyway, we should really get to a consensus about the terms, that would tremendously help reduce confusion.
So, what is an init system? It's really 4 things:
- The first program that is run when your machine boots. Traditionally, it's named
/sbin/init
, and that's the terminology I use when addressing this program. - The long-lived program that runs as pid 1 during most of the lifetime of the machine. It may or may not be the same program as
/sbin/init
, because/sbin/init
may exec into other programs. For sysvinit, or systemd, pid 1 is/sbin/init
. For an s6-based system, it isn't. - A process supervision system. This is basically a system that restarts daemons when they die, plus tools to address the current incarnation of the daemon no matter what pid it has. It is necessary for an init system to have this for at least one process, because if it doesn't, then all processes on the system (save pid 1) could die and the machine would become unusable and require a reboot from console.
- A machine state manager (to avoid ambiguous terminology). This is the software that brings your machine state from "everything is down" to "all the services I want are up", and that can also change the set of running services while your machine is running, and trigger a shutdown.
Those are the 4 important parts of an init system. So, how do existing init systems work?
- sysvinit provides
/sbin/init
, pid 1, a very rudimentary supervision system (implemented via lines in/etc/inittab
), and no machine state manager. Distributions using sysvinit generally use sysv-rc (the traditional bunch of shell scripts) or OpenRC as machine state manager. - OpenRC is a machine state manager. Recent versions of it also provide a rudimentary supervision system. But it does not provide
/sbin/init
or pid 1: OpenRC is not an init system per se. - systemd provides all 4 elements, in a single process. So, yes, systemd is both "the init" (which could mean
/sbin/init
or pid 1 or both) and "the service manager", whether "service manager" means supervision system or machine state manager. - All the daemontools-like approaches are essentially supervision systems. runit also provides a
/sbin/init
and pid 1. s6 provides a pid 1, but no/sbin/init
, but the s6-linux-init package provides a/sbin/init
. Those approaches do not provide a machine state manager, but s6 provides hooks for such managers and two have been written: s6-rc and anopa.
nosh provides all 4 elements, in separate processes. Jonathan will be able to talk about it much better than I would. :-)- When you look at any other init system (busybox init, BSD init, launchd, other approaches like Epoch, etc.) it is a good idea to wonder: what elements does this init provide? what is it lacking?
I have a 15-minute video explaining what I can only sum up briefly in this post, as well as a bigger deck of slides diving deep into the workings of an init system. All of it is available at the FOSDEM 2017 archive. Please feel free to explore. If you are interested in these things, we talk about them on the supervision mailing-list.
Enjoy,
answered Dec 20 at 11:47
Laurent Bercot
614
614
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f489742%2fwhat-is-the-difference-between-init-and-service-manager%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown