setsid: check for setsid error directly
function old new delta setsid_main 74 66 -8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
084e2284c7
commit
a29b055bf1
@ -25,11 +25,24 @@ int setsid_main(int argc UNUSED_PARAM, char **argv)
|
||||
/* setsid() is allowed only when we are not a process group leader.
|
||||
* Otherwise our PID serves as PGID of some existing process group
|
||||
* and cannot be used as PGID of a new process group. */
|
||||
if (getpgrp() == getpid())
|
||||
if (fork_or_rexec(argv))
|
||||
exit(EXIT_SUCCESS); /* parent */
|
||||
if (setsid() < 0) {
|
||||
pid_t pid = fork_or_rexec(argv);
|
||||
if (pid != 0) {
|
||||
/* parent */
|
||||
/* TODO:
|
||||
* we can waitpid(pid, &status, 0) and then even
|
||||
* emulate exitcode, making the behavior consistent
|
||||
* in both forked and non forked cases.
|
||||
* However, the code is larger and upstream
|
||||
* does not do such trick.
|
||||
*/
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
setsid(); /* no error possible */
|
||||
/* child */
|
||||
/* now there should be no error: */
|
||||
setsid();
|
||||
}
|
||||
|
||||
BB_EXECVP(argv[1], argv + 1);
|
||||
bb_simple_perror_msg_and_die(argv[1]);
|
||||
|
Loading…
Reference in New Issue
Block a user