diff options
author | Denys Vlasenko | 2013-08-07 18:49:51 +0200 |
---|---|---|
committer | Denys Vlasenko | 2013-08-07 18:49:51 +0200 |
commit | a5e6c6cd3b458e20643a9cd4202091720901a4d0 (patch) | |
tree | cadae7e89b93ef69141e577e69dda539e7571be4 | |
parent | 543efd7b4b4265ae507b4e3b048bf23a51a726fc (diff) | |
download | busybox-a5e6c6cd3b458e20643a9cd4202091720901a4d0.zip busybox-a5e6c6cd3b458e20643a9cd4202091720901a4d0.tar.gz |
setsid: code shrink, expanded comments
function old new delta
setsid_main 56 53 -3
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | miscutils/setsid.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/miscutils/setsid.c b/miscutils/setsid.c index ad2c8a4..637081b 100644 --- a/miscutils/setsid.c +++ b/miscutils/setsid.c @@ -31,7 +31,17 @@ 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. */ + * and cannot be used as PGID of a new process group. + * + * Example: setsid() below fails when run alone in interactive shell: + * $ setsid PROG + * because shell's child (setsid) is put in a new process group. + * But doesn't fail if shell is not interactive + * (and therefore doesn't create process groups for pipes), + * or if setsid is not the first process in the process group: + * $ true | setsid PROG + * or if setsid is executed in backquotes (`setsid PROG`)... + */ if (setsid() < 0) { pid_t pid = fork_or_rexec(argv); if (pid != 0) { @@ -43,7 +53,7 @@ int setsid_main(int argc UNUSED_PARAM, char **argv) * However, the code is larger and upstream * does not do such trick. */ - exit(EXIT_SUCCESS); + return EXIT_SUCCESS; } /* child */ |