summaryrefslogtreecommitdiff
path: root/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'init.c')
-rw-r--r--init.c44
1 files changed, 21 insertions, 23 deletions
diff --git a/init.c b/init.c
index 8a48380..b4ab1c7 100644
--- a/init.c
+++ b/init.c
@@ -331,7 +331,7 @@ static void console_init()
static pid_t run(char* command,
char *terminal, int get_enter)
{
- int i;
+ int i, fd;
pid_t pid;
char* tmpCmd;
char* cmd[255];
@@ -357,21 +357,20 @@ static pid_t run(char* command,
close(2);
setsid();
- if (device_open(terminal, O_RDWR) < 0) {
- message(LOG|CONSOLE, "Bummer, can't open %s\r\n", terminal);
- exit(1);
- }
- dup(0);
- dup(0);
- tcsetpgrp (0, getpgrp());
- set_term(0);
-
/* Reset signal handlers set for parent process */
signal(SIGUSR1, SIG_DFL);
signal(SIGUSR2, SIG_DFL);
signal(SIGINT, SIG_DFL);
signal(SIGTERM, SIG_DFL);
+ if ((fd = device_open(terminal, O_RDWR)) < 0) {
+ message(LOG|CONSOLE, "Bummer, can't open %s\r\n", terminal);
+ exit(1);
+ }
+ dup(fd);
+ dup(fd);
+ tcsetpgrp (0, getpgrp());
+ set_term(0);
if (get_enter==TRUE) {
/*
@@ -389,19 +388,21 @@ static pid_t run(char* command,
read(fileno(stdin), &c, 1);
}
+ /* Log the process name and args */
+ message(LOG|CONSOLE, "Starting pid %d, console %s: '",
+ shell_pgid, terminal, command);
+
/* Convert command (char*) into cmd (char**, one word per string) */
for (tmpCmd=command, i=0; (tmpCmd=strsep(&command, " \t")) != NULL;) {
if (*tmpCmd != '\0') {
cmd[i] = tmpCmd;
+ message(LOG|CONSOLE, "%s ", tmpCmd);
tmpCmd++;
i++;
}
}
cmd[i] = NULL;
-
- /* Log the process name and args */
- message(LOG, "Starting pid %d, console %s: '%s'\r\n",
- shell_pgid, terminal, cmd[0]);
+ message(LOG|CONSOLE, "'\r\n");
/* Now run it. The new program will take over this PID,
* so nothing further in init.c should be run. */
@@ -540,8 +541,8 @@ void new_initAction (initActionEnum action,
} else
strncpy(newAction->console, console, 255);
newAction->pid = 0;
-// message(LOG|CONSOLE, "process='%s' action='%d' console='%s'\n",
-// newAction->process, newAction->action, newAction->console);
+ message(LOG|CONSOLE, "process='%s' action='%d' console='%s'\n",
+ newAction->process, newAction->action, newAction->console);
}
void delete_initAction (initAction *action)
@@ -672,11 +673,8 @@ extern int init_main(int argc, char **argv)
usage( "init\n\nInit is the parent of all processes.\n\n"
"This version of init is designed to be run only by the kernel\n");
}
-
- /* from the controlling terminal */
- setsid();
-
- /* Set up sig handlers -- be sure to clear all of these in run() */
+ /* Set up sig handlers -- be sure to
+ * clear all of these in run() */
signal(SIGUSR1, halt_signal);
signal(SIGUSR2, reboot_signal);
signal(SIGINT, reboot_signal);
@@ -686,7 +684,7 @@ extern int init_main(int argc, char **argv)
* SIGINT on CAD so we can shut things down gracefully... */
reboot(RB_DISABLE_CAD);
#endif
-
+
/* Figure out where the default console should be */
console_init();
@@ -695,11 +693,11 @@ extern int init_main(int argc, char **argv)
close(1);
close(2);
set_term(0);
+ setsid();
/* Make sure PATH is set to something sane */
putenv(_PATH_STDPATH);
-
/* Hello world */
#ifndef DEBUG_INIT
message(LOG|CONSOLE,