--- Makefile | 2 ++ setsid.1 | 23 +++++++++++++++++++++++ setsid.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 setsid.1 create mode 100644 setsid.c diff --git a/Makefile b/Makefile index 59616a4..9de7455 100644 --- a/Makefile +++ b/Makefile _AT_@ -73,6 +73,7 @@ BIN = \ readahead \ respawn \ rmmod \ + setsid \ stat \ su \ swaplabel \ _AT_@ -107,6 +108,7 @@ MAN1 = \ pidof.1 \ ps.1 \ respawn.1 \ + setsid.1 \ stat.1 \ su.1 \ truncate.1 \ diff --git a/setsid.1 b/setsid.1 new file mode 100644 index 0000000..b343a60 --- /dev/null +++ b/setsid.1 _AT_@ -0,0 +1,23 @@ +.Dd 2016-03-29 +.Dt SETSID 1 +.Os sbase +.Sh NAME +.Nm setsid +.Nd run a command in a new session +.Sh SYNOPSIS +.Nm +.Op Fl -c +.Ar cmd +.Op Ar arg ... +.Sh DESCRIPTION +.Nm +runs +.Ar cmd +in a new session. +.Sh OPTIONS +.Bl -tag -width Ds +.It Fl c +Set the controlling terminal to stdin. +.El +.Sh SEE ALSO +.Xr setsid 2 diff --git a/setsid.c b/setsid.c new file mode 100644 index 0000000..c76b453 --- /dev/null +++ b/setsid.c _AT_@ -0,0 +1,49 @@ +/* See LICENSE file for copyright and license details. */ +#include <sys/ioctl.h> + +#include <errno.h> +#include <unistd.h> + +#include "util.h" + +static void +usage(void) +{ + eprintf("usage: %s cmd [-c] [arg ...]\n", argv0); +} + +int +main(int argc, char *argv[]) +{ + int savederrno; + int cflag = 0; + + ARGBEGIN { + case 'c': + cflag = 1; + default: + usage(); + } ARGEND + + if (getpgrp() == getpid()) { + switch (fork()) { + case -1: + eprintf("fork:"); + case 0: + break; + default: + return 0; + } + } + if (setsid() < 0) + eprintf("setsid:"); + + if (cflag && ioctl(STDIN_FILENO, TIOCSCTTY, 1)) + eprintf("TIOCSCTTY:"); + + execvp(argv[0], argv); + savederrno = errno; + weprintf("execvp %s:", argv[0]); + + _exit(126 + (savederrno == ENOENT)); +} -- 2.7.4Received on Tue Mar 29 2016 - 20:39:37 CEST
This archive was generated by hypermail 2.3.0 : Tue Mar 29 2016 - 20:48:15 CEST