ps: conditionally enable -T on non-DESKTOP build too
[oweals/busybox.git] / miscutils / setsid.c
index a976fe93b9d2e02be14bc1d50ac3460bfb0ea138..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 */
 
        BB_EXECVP(argv[1], argv + 1);
-       bb_perror_msg_and_die("%s", argv[1]);
+       bb_simple_perror_msg_and_die(argv[1]);
 }