diff options
author | Denis Vlasenko | 2006-12-27 04:35:09 +0000 |
---|---|---|
committer | Denis Vlasenko | 2006-12-27 04:35:09 +0000 |
commit | 7b76233290bd9dead1848f28ed6d0edfcceb8e09 (patch) | |
tree | b963999fc54eddb65f1929b894f868e24851fc9c /miscutils/setsid.c | |
download | busybox-1_3_0.zip busybox-1_3_0.tar.gz |
Correcting tag name to be like previous ones1_3_0
Diffstat (limited to 'miscutils/setsid.c')
-rw-r--r-- | miscutils/setsid.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/miscutils/setsid.c b/miscutils/setsid.c new file mode 100644 index 0000000..347b2ba --- /dev/null +++ b/miscutils/setsid.c @@ -0,0 +1,44 @@ +/* vi: set sw=4 ts=4: */ +/* + * setsid.c -- execute a command in a new session + * Rick Sladkey <jrs@world.std.com> + * In the public domain. + * + * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL> + * - added Native Language Support + * + * 2001-01-18 John Fremlin <vii@penguinpowered.com> + * - fork in case we are process group leader + * + * 2004-11-12 Paul Fox + * - busyboxed + */ + +#include "busybox.h" +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> + +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 */ + } + + setsid(); /* no error possible */ + + execvp(argv[1], argv + 1); + + bb_perror_msg_and_die("%s", argv[1]); +} |