blob: 80c719ca75c46a7e7d3350daee7236327c765d45 [file] [log] [blame]
Paul Fox42403642005-08-01 22:52:09 +00001/*
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
Mike Frysingere1d41b32006-03-23 02:07:41 +000021int setsid_main(int argc, char *argv[])
22{
23 if (argc < 2)
Paul Fox42403642005-08-01 22:52:09 +000024 bb_show_usage();
Paul Fox42403642005-08-01 22:52:09 +000025
26 if (getpgrp() == getpid()) {
27 switch(fork()){
28 case -1:
29 bb_perror_msg_and_die("fork");
30 case 0:
31 break;
32 default: /* parent */
33 exit(0);
34 }
35 /* child falls through */
36 }
37
38 setsid(); /* no error possible */
39
40 execvp(argv[1], argv + 1);
41
Mike Frysinger948a09d2006-03-23 02:07:20 +000042 bb_perror_msg_and_die("%s", argv[1]);
Paul Fox42403642005-08-01 22:52:09 +000043}