[git commit] setsid: implement -c
Denys Vlasenko
vda.linux at googlemail.com
Sun Jan 17 00:10:53 UTC 2016
commit: http://git.busybox.net/busybox/commit/?id=ccf7f0e4d3aed3bd9f46a239d9033cd773e67ab8
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master
function old new delta
setsid_main 53 96 +43
packed_usage 30846 30833 -13
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
miscutils/setsid.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/miscutils/setsid.c b/miscutils/setsid.c
index 637081b..1b27377 100644
--- a/miscutils/setsid.c
+++ b/miscutils/setsid.c
@@ -15,19 +15,22 @@
*/
//usage:#define setsid_trivial_usage
-//usage: "PROG ARGS"
+//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 (Ctrl-C etc).\n"
-//usage: "See setsid(2) for details."
+//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)
{
- if (!argv[1])
- bb_show_usage();
+ unsigned opt;
+
+ opt_complementary = "-1"; /* at least one arg */
+ opt = getopt32(argv, "c");
+ 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
@@ -61,6 +64,10 @@ int setsid_main(int argc UNUSED_PARAM, char **argv)
setsid();
}
- argv++;
+ if (opt) {
+ /* -c: set (with stealing) controlling tty */
+ ioctl(0, TIOCSCTTY, 1);
+ }
+
BB_EXECVP_or_die(argv);
}
More information about the busybox-cvs
mailing list