commiting:
[people/mcb30/busybox.git] / miscutils / setsid.c
1 /*
2  * setsid.c -- execute a command in a new session
3  * Rick Sladkey <jrs@world.std.com>
4  * In the public domain.
5  *
6  * 1999-02-22 Arkadiusz Mi¬∂kiewicz <misiek@pld.ORG.PL>
7  * - added Native Language Support
8  *
9  * 2001-01-18 John Fremlin <vii@penguinpowered.com>
10  * - fork in case we are process group leader
11  *
12  * 2004-11-12 Paul Fox
13  * - busyboxed
14  */
15
16 #include <stdio.h>
17 #include <unistd.h>
18 #include <stdlib.h>
19 #include "busybox.h"
20
21 int
22 setsid_main(int argc, char *argv[]) {
23         
24         if (argc < 2) {
25                 bb_show_usage();
26         }
27
28         if (getpgrp() == getpid()) {
29                 switch(fork()){
30                 case -1:
31                         bb_perror_msg_and_die("fork");
32                 case 0:
33                         break;
34                 default:        /* parent */
35                         exit(0);
36                 }
37                 /* child falls through */
38         }
39
40         setsid();  /* no error possible */
41
42         execvp(argv[1], argv + 1);
43
44         bb_perror_msg_and_die(argv[1]);
45
46 }