Avoid calling exit() from within fork/vfork'ed processes.
-Erik
This commit is contained in:
parent
a920871c3a
commit
6f2ebcaa01
10
shell/lash.c
10
shell/lash.c
@ -1214,7 +1214,7 @@ static int pseudo_exec(struct child_prog *child)
|
||||
*/
|
||||
for (x = bltins; x->cmd; x++) {
|
||||
if (strcmp(child->argv[0], x->cmd) == 0 ) {
|
||||
exit(x->function(child));
|
||||
_exit(x->function(child));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1222,7 +1222,7 @@ static int pseudo_exec(struct child_prog *child)
|
||||
for (x = bltins_forking; x->cmd; x++) {
|
||||
if (strcmp(child->argv[0], x->cmd) == 0) {
|
||||
applet_name=x->cmd;
|
||||
exit (x->function(child));
|
||||
_exit (x->function(child));
|
||||
}
|
||||
}
|
||||
#ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL
|
||||
@ -1258,7 +1258,11 @@ static int pseudo_exec(struct child_prog *child)
|
||||
#endif
|
||||
|
||||
execvp(child->argv[0], child->argv);
|
||||
perror_msg_and_die("%s", child->argv[0]);
|
||||
|
||||
/* Do not use perror_msg_and_die() here, since we must not
|
||||
* call exit() but should call _exit() instead */
|
||||
fprintf(stderr, "%s: %s\n", child->argv[0], strerror(err));
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
static void insert_job(struct job *newjob, int inbg)
|
||||
|
Loading…
Reference in New Issue
Block a user