diff options
author | Paul Fox | 2005-08-01 22:52:09 +0000 |
---|---|---|
committer | Paul Fox | 2005-08-01 22:52:09 +0000 |
commit | 4240364098e0a2aa4edcd854de68373f5b6aa659 (patch) | |
tree | 2777c5fa3a0295d4e84604d2bba95a4c1cc677b2 /miscutils | |
parent | f1dbd4a6f7438b247ad166dfd507c0868c64e7a6 (diff) | |
download | busybox-4240364098e0a2aa4edcd854de68373f5b6aa659.zip busybox-4240364098e0a2aa4edcd854de68373f5b6aa659.tar.gz |
commiting:
0000028 03-16-05 patch: new setsid applet
Diffstat (limited to 'miscutils')
-rw-r--r-- | miscutils/Config.in | 6 | ||||
-rw-r--r-- | miscutils/Makefile.in | 1 | ||||
-rw-r--r-- | miscutils/setsid.c | 46 |
3 files changed, 53 insertions, 0 deletions
diff --git a/miscutils/Config.in b/miscutils/Config.in index 69a3300..6c68cd0 100644 --- a/miscutils/Config.in +++ b/miscutils/Config.in @@ -215,6 +215,12 @@ config CONFIG_STRINGS strings prints the printable character sequences for each file specified. +config CONFIG_SETSID + bool "setsid" + default n + help + setsid runs a program in a new session + config CONFIG_TIME bool "time" default n diff --git a/miscutils/Makefile.in b/miscutils/Makefile.in index d4c5ff7..8c53104 100644 --- a/miscutils/Makefile.in +++ b/miscutils/Makefile.in @@ -36,6 +36,7 @@ MISCUTILS-$(CONFIG_LAST) += last.o MISCUTILS-$(CONFIG_MAKEDEVS) += makedevs.o MISCUTILS-$(CONFIG_MT) += mt.o MISCUTILS-$(CONFIG_RX) += rx.o +MISCUTILS-$(CONFIG_SETSID) += setsid.o MISCUTILS-$(CONFIG_STRINGS) += strings.o MISCUTILS-$(CONFIG_TIME) += time.o MISCUTILS-$(CONFIG_WATCHDOG) += watchdog.o diff --git a/miscutils/setsid.c b/miscutils/setsid.c new file mode 100644 index 0000000..7df35be --- /dev/null +++ b/miscutils/setsid.c @@ -0,0 +1,46 @@ +/* + * 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 <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include "busybox.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(argv[1]); + +} |