sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

commit ddec3259aad6b92727a4f82501b98a491176ac3b
parent 7be94fd3c825a0aa8f6cef97240bdae7eec3f47d
Author: sin <sin@2f30.org>
Date:   Wed, 21 Aug 2013 12:56:26 +0100

Add setsid(1) by arg

Diffstat:
MMakefile | 1+
Asetsid.1 | 7+++++++
Asetsid.c | 42++++++++++++++++++++++++++++++++++++++++++
3 files changed, 50 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile @@ -68,6 +68,7 @@ SRC = \ rm.c \ rmdir.c \ sleep.c \ + setsid.c \ sort.c \ split.c \ sponge.c \ diff --git a/setsid.1 b/setsid.1 @@ -0,0 +1,7 @@ +.TH SETSID 1 sbase\-VERSION +.SH NAME +setsid \- run a program in a new session +.SH SYNOPSIS +.B setsid +.RI program +.RI [ arg ...] diff --git a/setsid.c b/setsid.c @@ -0,0 +1,42 @@ +/* (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> + * See LICENSE file for license details. */ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include "util.h" + +static void +usage(void) +{ + eprintf("usage: %s cmd [arg ...]\n", argv0); +} + +int +main(int argc, char *argv[]) +{ + ARGBEGIN { + default: + usage(); + } ARGEND; + + if (argc < 1) + usage(); + + if(getpgrp() == getpid()) { + switch(fork()){ + case -1: + eprintf("fork:"); + case 0: + break; + default: + exit(0); + } + } + if(setsid() < 0) + eprintf("setsid:"); + execvp(argv[0], argv); + eprintf("execvp:"); + /* NOTREACHED */ + return 0; +}