From a5e6c6cd3b458e20643a9cd4202091720901a4d0 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 7 Aug 2013 18:49:51 +0200 Subject: setsid: code shrink, expanded comments function old new delta setsid_main 56 53 -3 Signed-off-by: Denys Vlasenko --- miscutils/setsid.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'miscutils') diff --git a/miscutils/setsid.c b/miscutils/setsid.c index ad2c8a4de..637081b6c 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 */ -- cgit v1.2.3