+/* vi: set sw=4 ts=4: */
/*
* setsid.c -- execute a command in a new session
* Rick Sladkey <jrs@world.std.com>
* - busyboxed
*/
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
#include "busybox.h"
-int setsid_main(int argc, char *argv[])
+int setsid_main(int argc, char **argv);
+int setsid_main(int argc, char **argv)
{
if (argc < 2)
bb_show_usage();
- if (getpgrp() == getpid()) {
- switch(fork()){
- case -1:
- bb_perror_msg_and_die("fork");
- case 0:
- break;
- default: /* parent */
- exit(0);
- }
- /* child falls through */
- }
+ /* Comment why is this necessary? */
+ if (getpgrp() == getpid())
+ forkexit_or_rexec(argv);
setsid(); /* no error possible */
- execvp(argv[1], argv + 1);
-
+ BB_EXECVP(argv[1], argv + 1);
bb_perror_msg_and_die("%s", argv[1]);
}