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.
|
/* setsid() is allowed only when we are not a process group leader.
|
||||||
* Otherwise our PID serves as PGID of some existing process group
|
* Otherwise our PID serves as PGID of some existing process group
|
||||||
* and cannot be used as PGID of a new process group. */
|
* and cannot be used as PGID of a new process group. */
|
||||||
if (getpgrp() == getpid())
|
if (setsid() < 0) {
|
||||||
if (fork_or_rexec(argv))
|
pid_t pid = fork_or_rexec(argv);
|
||||||
exit(EXIT_SUCCESS); /* parent */
|
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_EXECVP(argv[1], argv + 1);
|
||||||
bb_simple_perror_msg_and_die(argv[1]);
|
bb_simple_perror_msg_and_die(argv[1]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user