ps: conditionally enable -T on non-DESKTOP build too
[oweals/busybox.git] / miscutils / setsid.c
index 8d738edfbfec1f0c1dade53ce2edb08cfcd6ca63..d7de1f149726b179753f6cbf15595a9936a7baa0 100644 (file)
@@ -4,7 +4,7 @@
  * Rick Sladkey <jrs@world.std.com>
  * In the public domain.
  *
- * 1999-02-22 Arkadiusz MiΒΆkiewicz <misiek@pld.ORG.PL>
+ * 1999-02-22 Arkadiusz Mickiewicz <misiek@pld.ORG.PL>
  * - added Native Language Support
  *
  * 2001-01-18 John Fremlin <vii@penguinpowered.com>
 
 #include "libbb.h"
 
-int setsid_main(int argc, char **argv);
-int setsid_main(int argc, char **argv)
+int setsid_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int setsid_main(int argc UNUSED_PARAM, char **argv)
 {
-       if (argc < 2)
+       if (!argv[1])
                bb_show_usage();
 
-       /* Comment why is this necessary? */
+       /* 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())
-               forkexit_or_rexec(argv);
+               if (fork_or_rexec(argv))
+                       exit(EXIT_SUCCESS); /* parent */
 
        setsid();  /* no error possible */