Add setsid(1) by arg
This commit is contained in:
parent
7be94fd3c8
commit
ddec3259aa
1
Makefile
1
Makefile
|
@ -68,6 +68,7 @@ SRC = \
|
||||||
rm.c \
|
rm.c \
|
||||||
rmdir.c \
|
rmdir.c \
|
||||||
sleep.c \
|
sleep.c \
|
||||||
|
setsid.c \
|
||||||
sort.c \
|
sort.c \
|
||||||
split.c \
|
split.c \
|
||||||
sponge.c \
|
sponge.c \
|
||||||
|
|
7
setsid.1
Normal file
7
setsid.1
Normal file
|
@ -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 ...]
|
42
setsid.c
Normal file
42
setsid.c
Normal file
|
@ -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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user