diff options
author | Denys Vlasenko | 2017-04-12 13:58:40 +0200 |
---|---|---|
committer | Denys Vlasenko | 2017-04-12 13:58:40 +0200 |
commit | 783d57af7bb2b851c16cf87df848e0365e5052da (patch) | |
tree | 71bb23e51b9cb40eac4a6fb831383134c1fc45a0 /miscutils/setsid.c | |
parent | ac47a00e2ec398b04c3141cd3434a6e4b95740b1 (diff) | |
download | busybox-783d57af7bb2b851c16cf87df848e0365e5052da.zip busybox-783d57af7bb2b851c16cf87df848e0365e5052da.tar.gz |
Sort some miscutils/ applets into coreutils or util-linux
No code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils/setsid.c')
-rw-r--r-- | miscutils/setsid.c | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/miscutils/setsid.c b/miscutils/setsid.c deleted file mode 100644 index 143a8f8..0000000 --- a/miscutils/setsid.c +++ /dev/null @@ -1,82 +0,0 @@ -/* 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 Mickiewicz <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 - */ -//config:config SETSID -//config: bool "setsid" -//config: default y -//config: help -//config: setsid runs a program in a new session - -//applet:IF_SETSID(APPLET(setsid, BB_DIR_USR_BIN, BB_SUID_DROP)) - -//kbuild:lib-$(CONFIG_SETSID) += setsid.o - -//usage:#define setsid_trivial_usage -//usage: "[-c] PROG ARGS" -//usage:#define setsid_full_usage "\n\n" -//usage: "Run PROG in a new session. PROG will have no controlling terminal\n" -//usage: "and will not be affected by keyboard signals (^C etc).\n" -//usage: "\n -c Set controlling terminal to stdin" - -#include "libbb.h" - -int setsid_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int setsid_main(int argc UNUSED_PARAM, char **argv) -{ - unsigned opt; - - opt_complementary = "-1"; /* at least one arg */ - opt = getopt32(argv, "+c"); /* +: stop on first non-opt */ - argv += optind; - - /* setsid() is allowed only when we are not a process group leader. - * Otherwise our PID serves as PGID of some existing process group - * and cannot be used as PGID of a new process group. - * - * Example: setsid() below fails when run alone in interactive shell: - * $ setsid PROG - * because shell's child (setsid) is put in a new process group. - * But doesn't fail if shell is not interactive - * (and therefore doesn't create process groups for pipes), - * or if setsid is not the first process in the process group: - * $ true | setsid PROG - * or if setsid is executed in backquotes (`setsid PROG`)... - */ - if (setsid() < 0) { - pid_t pid = fork_or_rexec(argv); - if (pid != 0) { - /* parent */ - /* TODO: - * we can waitpid(pid, &status, 0) and then even - * emulate exitcode, making the behavior consistent - * in both forked and non forked cases. - * However, the code is larger and upstream - * does not do such trick. - */ - return EXIT_SUCCESS; - } - - /* child */ - /* now there should be no error: */ - setsid(); - } - - if (opt) { - /* -c: set (with stealing) controlling tty */ - ioctl(0, TIOCSCTTY, 1); - } - - BB_EXECVP_or_die(argv); -} |