diff options
author | mike <mike@FreeBSD.org> | 2001-08-30 04:48:02 +0000 |
---|---|---|
committer | mike <mike@FreeBSD.org> | 2001-08-30 04:48:02 +0000 |
commit | 6fa2f09167345ff3d8292e59e0dc6957a66012d4 (patch) | |
tree | 6d61e0bc1195d4d46859e7244958a5f0edc3098e /usr.sbin/daemon | |
parent | 487729ee2393f89aa3c87357445ab26d2213dc6e (diff) | |
download | FreeBSD-src-6fa2f09167345ff3d8292e59e0dc6957a66012d4.zip FreeBSD-src-6fa2f09167345ff3d8292e59e0dc6957a66012d4.tar.gz |
Add a new utility that runs an executable detached from the
controlling terminal.
Discussed on: -hackers
Obtained from: BSD/OS
Diffstat (limited to 'usr.sbin/daemon')
-rw-r--r-- | usr.sbin/daemon/Makefile | 7 | ||||
-rw-r--r-- | usr.sbin/daemon/daemon.8 | 73 | ||||
-rw-r--r-- | usr.sbin/daemon/daemon.c | 78 |
3 files changed, 158 insertions, 0 deletions
diff --git a/usr.sbin/daemon/Makefile b/usr.sbin/daemon/Makefile new file mode 100644 index 0000000..ab9f706 --- /dev/null +++ b/usr.sbin/daemon/Makefile @@ -0,0 +1,7 @@ +# $FreeBSD$ + +PROG= daemon +WARNS?= 2 +MAN= daemon.8 + +.include <bsd.prog.mk> diff --git a/usr.sbin/daemon/daemon.8 b/usr.sbin/daemon/daemon.8 new file mode 100644 index 0000000..3a23f54 --- /dev/null +++ b/usr.sbin/daemon/daemon.8 @@ -0,0 +1,73 @@ +.\" Copyright (c) 1999 Berkeley Software Design, Inc. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Berkeley Software Design Inc's name may not be used to endorse or +.\" promote products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd August 30, 2001 +.Dt DAEMON 8 +.Os BSD 3 +.Sh NAME +.Nm daemon +.Nd run detached from the controlling terminal +.Sh SYNOPSIS +.Nm daemon +.Op Fl cf +.Ar "command arguments ..." +.Sh DESCRIPTION +.Pp +The +.Nm +utility detaches itself from the controlling terminal and +executes the program specified by its arguments. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl c +Change the current working directory to the root (``/''). +.It Fl f +Redirect standard input, standard output and standard error to +.Pa /dev/null . +.El +.Sh DIAGNOSTICS +The +.Nm +utility exits 1 if an error is returned by the +.Xr daemon 3 +library routine, otherwise 0. +If the command cannot be executed, an error message is displayed on +standard error unless the +.Fl f +flag is specified. +.Sh SEE ALSO +.Xr daemon 3 , +.Xr exec 3 , +.Xr termios 4 , +.Xr tty 4 +.Sh HISTORY +The +.Nm +utility first appeared in +.Fx 5.0 . diff --git a/usr.sbin/daemon/daemon.c b/usr.sbin/daemon/daemon.c new file mode 100644 index 0000000..89f135b --- /dev/null +++ b/usr.sbin/daemon/daemon.c @@ -0,0 +1,78 @@ +/*- + * Copyright (c) 1999 Berkeley Software Design, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Berkeley Software Design Inc's name may not be used to endorse or + * promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * From BSDI: daemon.c,v 1.2 1996/08/15 01:11:09 jch Exp + * $FreeBSD$ + */ + +#include <sys/types.h> + +#include <err.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static void usage(void); + +int +main(int argc, char *argv[]) +{ + int ch, nochdir, noclose; + + nochdir = noclose = 1; + while ((ch = getopt(argc, argv, "-cf")) != -1) { + switch (ch) { + case 'c': + nochdir = 0; + break; + case 'f': + noclose = 0; + break; + case '?': + default: + usage(); + } + } + argc -= optind; + argv += optind; + + if (argc == 0) + usage(); + if (daemon(nochdir, noclose) == -1) + err(1, NULL); + execvp(argv[0], argv); + + /* The child is now running, so the exit status doesn't matter. */ + err(1, "%s", argv[0]); +} + +static void +usage(void) +{ + (void)fprintf(stderr, "usage: daemon [-cf] command arguments ...\n"); + exit(1); +} |