mirror of
https://github.com/troglobit/finit.git
synced 2026-11-10 16:31:21 +00:00
Improve runlevel support by adding a bootstrap phase, also adds task/run cmd
Most systems need an early bootstrap phase for one-shot tasks and necessary one-time probing. This phase usually runs well before any networking is setup. This commit adds support for that 'S' runlevel, and also extends the number of possible total runlevels to nine. For the one-shot tasks that run in bootstrap two new finit.conf cmds have been added: - task: For one-shot tasks that can be started in parallell - run: For one-shot tasks that must run in sequence Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
1 parent
e776838de9
commit
25cc9f3b9b
9 files changed
+163
-85
No files matched your search
@@ -309,7 +309,7 @@ int procname_kill (char *name, int signo)
|
||||
}
|
||||
|
||||
|
||||
static int print_uptime(void)
|
||||
static int print_timestamp(void)
|
||||
{
|
||||
#if defined(CONFIG_PRINTK_TIME)
|
||||
FILE * uptimefile;
|
||||
@@ -332,12 +332,10 @@ static int print_uptime(void)
|
||||
|
||||
void print_desc(char *action, char *desc)
|
||||
{
|
||||
const char home[] = "\r\e[K";
|
||||
const char dots[] = " .....................................................................";
|
||||
|
||||
write(STDERR_FILENO, home, strlen(home));
|
||||
|
||||
print_uptime();
|
||||
delline();
|
||||
print_timestamp();
|
||||
|
||||
write(STDERR_FILENO, action, strlen(action));
|
||||
write(STDERR_FILENO, desc, strlen(desc));
|
||||
@@ -354,6 +352,25 @@ int print_result(int fail)
|
||||
return fail;
|
||||
}
|
||||
|
||||
/* Wait for process completion, returns status of waitpid(2) syscall */
|
||||
int complete(char *cmd, int pid)
|
||||
{
|
||||
int status = 0;
|
||||
|
||||
if (waitpid(pid, &status, 0) == -1) {
|
||||
if (errno == EINTR)
|
||||
_e("Caught unblocked signal waiting for %s, aborting.", cmd);
|
||||
else if (errno == ECHILD)
|
||||
_e("Caught SIGCHLD waiting for %s, aborting.", cmd);
|
||||
else
|
||||
_e("Failed starting %s, error %d: %s", cmd, errno, strerror (errno));
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
int run(char *cmd)
|
||||
{
|
||||
int status, result, i = 0;
|
||||
@@ -423,14 +440,8 @@ int run(char *cmd)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (waitpid(pid, &status, 0) == -1) {
|
||||
if (errno == EINTR)
|
||||
_e("Caught unblocked signal waiting for %s, aborting.", args[0]);
|
||||
else if (errno == ECHILD)
|
||||
_e("Caught SIGCHLD waiting for %s, aborting.", args[0]);
|
||||
else
|
||||
_e("Failed starting %s, error %d: %s", args[0], errno, strerror (errno));
|
||||
|
||||
status = complete(args[0], pid);
|
||||
if (-1 == status) {
|
||||
if (fp) fclose(fp);
|
||||
free(backup);
|
||||
|
||||
|
||||
Reference in new issue
Block a user