Age | Commit message (Collapse) | Author |
|
Instead use wait() in the main loop. This way, the supervisor
functions (except set target) are no longer called from signal
context and can be simplified a little.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
It basically needs to wait for ALL children (even those created by
child processes) to terminate before terminating itself.
This commit replaces the waitpid loop with a regular wait that and
adds another wait loop at the end of run_sequentially to wait for
any transitive children. The sigchld handling is removed from the
signal handler and the handler is only installed for SIGINT,
SIGTERM and SIGHUP. The other signals that initd hooks are set to
default.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
If runsvc is installed as sub reaper, it must handle SIGCHLD or
the system will accumulate zombie processes. Also, forward all
other signal to the currently supervised child process and hope
that if it is SIGTERM, the child itself knows how to shut down
any other processes it created.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
If a singleshot service terminates, don't change
the "waiting" sate.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
For particularly hostile daemons.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
- Cleanly seperate service description parsed from file
from the actual run-time data.
- Remove the use of the signalfd and make asyncronous calls
into the supervisor from signal context work.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
A cleaner, more planned out version will be added back later.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
With the previous changes, there were only used by the status
command.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Just in case initd leaks anything. Also, the service has no
buisness writing all over /dev/console. It's a system service, it
better use syslog or its own internal logging service.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
- exec_t belongs to service.h, the main place where it is used/needed
- code for executing exec_t is moved to runsvc for the same reason
- what is left are NORETURN and ARRAY_SIZE
- the former can be replaced with direct attribute usage since
the only relevant compilers all support the attribute.
- the later is only used in 3 places and can be trivially replaced
with direct usage of sizeof().
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Targetting anything else than Linux isn't really relevant. All
other systems ($BSD and other Unices) are a closed ecosystem
where kernel & userspace are developed together. They don't need
something like a third party init system, so compatibillity can
be largely ignored.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
We also want this meachanism to still work for manually started
service (especially after reloading services).
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Replace array adhockery with structs and make use of the handy
endianness conversion macros.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
- rename init_status_response_t to init_status_t
- merge code for handling it
- fix memory leak in status command
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
This commit add the ability to initd to reload the service configuration
while running. The new configuration is merged with the existing one as
follows:
For each target:
- If the existing service list is not NULL, we have not started that
target yet. Simply replace it with the new list.
- If it is NULL, the services have already been started.
- First, remove all entries for services in that target that no
loner exist (except from the 'running' list).
- Second, add new services that we don't have yet. Treat them as
recently diseased and let the user start them manualy.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
First in rdsvc, tag the services that *do* have exec lines, even if we don't
read them.
Second, if a service does not have that flag set, don't try to execute it.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Simply execute the last entry in the list directly instead of forking and
remove the cleanup code.
If the list is empty, we return success.
If the list only has one entry, we directly execute that. No need to make a
distinction between single entry vs list anymore.
If the list is an actual list, we run it as before but execute the last one
directly. Typically, the last one is something like a daemon preceeded by
setup code. The daemon ends up directly underneath init, without a dummy
waiting runsvc stuck in the process list.
If we always do an exec, there is no point in doing cleanup. All our mapped
memory is evicted anyway. Same if we exit appruptly because of an error.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
confused deputy is confused.
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
- mimic format of initd
- skip formatting if not a tty
- distinguish exited because failed vs exited because done
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|
|
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
|