[git commit] setsid: code shrink, expanded comments

Denys Vlasenko vda.linux at googlemail.com
Wed Aug 7 16:49:51 UTC 2013


commit: http://git.busybox.net/busybox/commit/?id=a5e6c6cd3b458e20643a9cd4202091720901a4d0
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
setsid_main                                           56      53      -3

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 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 */


More information about the busybox-cvs mailing list