Replaces commands/nohup. No Minix-specific changes needed.
Change-Id: I2fb7c387833a8898cf30fc3ac25ea53ee1031bd1
less loadkeys loadramdisk logger look lp \
lpd lspci mail MAKEDEV \
mesg mined mkfifo \
- mount mt netconf nohup \
+ mount mt netconf \
nonamed od paste patch \
ping postinstall poweroff pr prep printroot \
profile progressbar pr_routes ps pwdauth \
+++ /dev/null
-PROG= nohup
-MAN=
-
-.include <bsd.prog.mk>
+++ /dev/null
-/*
- * Copyright (c) 2009, Erik van der Kouwe
- * 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. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 THE AUTHOR 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.
- */
-
-/*
- * Functionality implemented according to this specification:
- * http://www.opengroup.org/onlinepubs/000095399/utilities/nohup.html
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#define NOHUP_OUT_FILENAME "nohup.out"
-
-static void print_usage(const char *argv0)
-{
- printf("Usage: %s command [arg...]\n", argv0);
-}
-
-static int redirect_tty(void)
-{
- int fd;
- char buffer[PATH_MAX + 1], *home;
-
- /* redirect stdout to a file if needed */
- if (isatty(STDOUT_FILENO))
- {
- /* first try: current directory */
- fd = open(NOHUP_OUT_FILENAME, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR);
- if (fd < 0)
- {
- /* alternative: home directory */
- home = getenv("HOME");
- if (home)
- {
- snprintf(buffer, sizeof(buffer), "%s/%s", home, NOHUP_OUT_FILENAME);
- buffer[sizeof(buffer) - 1] = 0;
- fd = open(buffer, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR);
- }
- }
-
- if (fd < 0)
- {
- perror("cannot create " NOHUP_OUT_FILENAME " and $HOME/" NOHUP_OUT_FILENAME);
- return -1;
- }
-
- /* move the fd to stdout */
- if (dup2(fd, STDOUT_FILENO) < 0 || close(fd) < 0)
- {
- perror("cannot redirect stdout");
- return -1;
- }
- }
-
- /* redirect stderr to stdout if needed */
- if (isatty(STDERR_FILENO))
- {
- if (dup2(STDOUT_FILENO, STDERR_FILENO) < 0)
- {
- perror("cannot redirect stderr");
- return -1;
- }
- }
-
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- struct sigaction sa;
-
- /* check parameters */
- if (argc < 2)
- {
- print_usage(argv[0]);
- return 127;
- }
-
- /* ignore SIGHUP */
- sa.sa_handler = SIG_IGN;
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction(SIGHUP, &sa, NULL) < 0)
- {
- perror("cannot ignore SIGHUP");
- return 127;
- }
-
- /* redirect TTY input and output */
- if (redirect_tty() < 0)
- return 127;
-
- /* run the command */
- execvp(argv[1], argv + 1);
- perror("cannot execute");
-
- /* exit code depends on whether the utility was found */
- switch (errno)
- {
- case ELOOP:
- case ENAMETOOLONG:
- case ENOENT:
- case ENOTDIR:
- /* utility not found */
- return 127;
-
- default:
- /* exec failed for other reason */
- return 126;
- }
-}
last.1 loadfont.1 loadkeys.1 logger.1 \
look.1 lp.1 lspci.1 mail.1 \
mesg.1 mixer.1 \
- mkproto.1 mount.1 mt.1 nohup.1 od.1 \
+ mkproto.1 mount.1 mt.1 od.1 \
paste.1 ping.1 playwave.1 pr.1 prep.1 \
profile.1 ps.1 rcp.1 recwave.1 \
remsync.1 rget.1 rlogin.1 rsh.1 rz.1 \
+++ /dev/null
-.TH NOHUP 1
-.SH NAME
-nohup \- ignore hangup signal
-.SH SYNOPSIS
-\fBnohup\fP \fIutility\fP [\fIargument\fP...]
-.SH DESCRIPTION
-The
-.B nohup
-utility runs \fIutility\fP while ignoring the SIGHUP signal. This
-allows the process to continue running after the current terminal
-exits, for example when logging off a telnet session.
-
-Unless output is explicitly redirected when invoking nohup, output is
-appended to a file named nohup.out. This file is created in the current
-directory or, if this is not possible, in $HOME. If the standard error
-stream is not explicitly redirected, it is sent to the standard output.
-.SH AUTHOR
-This manual page and the utility were written by Erik van der Kouwe
-<vdkouwe@cs.vu.nl>.
2009/08/15 20:44:56,usr.bin/mktemp
2012/10/17 12:00:00,usr.bin/nbperf
2013/10/10 12:00:00,usr.bin/nice
+2013/10/12 12:00:00,usr.bin/nohup
2012/10/17 12:00:00,usr.bin/nvi
2010/05/14 17:28:23,usr.bin/newgrp
2012/10/17 12:00:00,usr.bin/passwd
machine make man \
mkdep mktemp \
\
- nbperf newgrp nice nvi \
+ nbperf newgrp nice nohup nvi \
passwd \
printf \
rev \
--- /dev/null
+# @(#)Makefile 8.1 (Berkeley) 6/6/93
+# $NetBSD: Makefile,v 1.3 1995/08/31 23:35:23 jtc Exp $
+
+PROG= nohup
+
+.include <bsd.prog.mk>
--- /dev/null
+.\" $NetBSD: nohup.1,v 1.15 2012/03/29 18:33:19 wiz Exp $
+.\"
+.\" Copyright (c) 1989, 1990, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" the Institute of Electrical and Electronics Engineers, Inc.
+.\"
+.\" 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. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 THE REGENTS OR CONTRIBUTORS 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.
+.\"
+.\" @(#)nohup.1 8.1 (Berkeley) 6/6/93
+.\"
+.Dd July 15, 2005
+.Dt NOHUP 1
+.Os
+.Sh NAME
+.Nm nohup
+.Nd invoke a command immune to hangups
+.Sh SYNOPSIS
+.Nm
+.Ar utility
+.Op Ar arg ...
+.Sh DESCRIPTION
+The
+.Nm
+command allows the specified utility to be protected from termination
+if the user should become logged out
+(for example, due to a modem line or TCP/IP connection being dropped).
+To do this,
+.Nm
+sets the
+.Dv SIGHUP
+.Xr signal 3
+.Pq Dq terminal line hangup
+to be ignored,
+then executes
+.Ar utility
+along with any arguments.
+.Pp
+If the standard output is a terminal, the standard output is
+appended to the file
+.Pa nohup.out
+in the current directory.
+If standard error is a terminal, it is directed to the same place
+as the standard output.
+If the output file
+.Pa nohup.out
+cannot be created in the current directory,
+.Nm
+attempts to create the file in the user's home directory.
+If the file
+.Pa nohup.out
+cannot be created,
+either in the current directory or the user's home directory,
+.Nm
+will exit without invoking
+.Ar utility ,
+with an exit value as described below.
+.Sh ENVIRONMENT
+The following variable is used by
+.Nm :
+.Bl -tag -width flag
+.It Ev HOME
+User's home directory.
+.El
+.Sh EXIT STATUS
+The
+.Nm
+utility exits with one of the following values:
+.Bl -tag -width Ds
+.It 126
+The
+.Ar utility
+was found but could not be invoked.
+.It 127
+The
+.Ar utility
+could not be found or an error occurred in
+.Nm .
+.El
+.Pp
+Otherwise, the exit status of
+.Nm
+will be that of
+.Ar utility .
+.Sh SEE ALSO
+.Xr signal 3
+.Sh STANDARDS
+The
+.Nm
+command is expected to be
+.St -p1003.2
+compatible.
--- /dev/null
+/* $NetBSD: nohup.c,v 1.15 2011/09/06 18:24:15 joerg Exp $ */
+
+/*
+ * Copyright (c) 1989 The Regents of the University of California.
+ * 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. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 THE REGENTS OR CONTRIBUTORS 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1989\
+ The Regents of the University of California. All rights reserved.");
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)nohup.c 5.4 (Berkeley) 6/1/90";
+#endif
+__RCSID("$NetBSD: nohup.c,v 1.15 2011/09/06 18:24:15 joerg Exp $");
+#endif /* not lint */
+
+#include <sys/param.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+static void dofile(void);
+__dead static void usage(void);
+
+/* nohup shall exit with one of the following values:
+ 126 - The utility was found but could not be invoked.
+ 127 - An error occurred in the nohup utility, or the utility could
+ not be found. */
+#define EXIT_NOEXEC 126
+#define EXIT_NOTFOUND 127
+#define EXIT_MISC 127
+
+int
+main(int argc, char **argv)
+{
+ int exit_status;
+
+ while (getopt(argc, argv, "") != -1) {
+ usage();
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (argc < 1)
+ usage();
+
+ if (isatty(STDOUT_FILENO))
+ dofile();
+ if (isatty(STDERR_FILENO) && dup2(STDOUT_FILENO, STDERR_FILENO) == -1) {
+ /* may have just closed stderr */
+ (void)fprintf(stdin, "nohup: %s\n", strerror(errno));
+ exit(EXIT_MISC);
+ }
+
+ /* The nohup utility shall take the standard action for all signals
+ except that SIGHUP shall be ignored. */
+ (void)signal(SIGHUP, SIG_IGN);
+
+ execvp(argv[0], &argv[0]);
+ exit_status = (errno == ENOENT) ? EXIT_NOTFOUND : EXIT_NOEXEC;
+ (void)fprintf(stderr, "nohup: %s: %s\n", argv[0], strerror(errno));
+ exit(exit_status);
+}
+
+static void
+dofile(void)
+{
+ int fd;
+ char path[MAXPATHLEN];
+ const char *p;
+
+ /* If the standard output is a terminal, all output written to
+ its standard output shall be appended to the end of the file
+ nohup.out in the current directory. If nohup.out cannot be
+ created or opened for appending, the output shall be appended
+ to the end of the file nohup.out in the directory specified
+ by the HOME environment variable.
+
+ If a file is created, the file's permission bits shall be
+ set to S_IRUSR | S_IWUSR. */
+#define FILENAME "nohup.out"
+ p = FILENAME;
+ if ((fd = open(p, O_RDWR|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR)) >= 0)
+ goto dupit;
+ if ((p = getenv("HOME")) != NULL) {
+ (void)strlcpy(path, p, sizeof(path));
+ (void)strlcat(path, "/", sizeof(path));
+ (void)strlcat(path, FILENAME, sizeof(path));
+ if ((fd = open(p = path, O_RDWR|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR)) >= 0)
+ goto dupit;
+ }
+ (void)fprintf(stderr, "nohup: can't open a nohup.out file.\n");
+ exit(EXIT_MISC);
+
+dupit: (void)lseek(fd, 0L, SEEK_END);
+ if (dup2(fd, STDOUT_FILENO) == -1) {
+ (void)fprintf(stderr, "nohup: %s\n", strerror(errno));
+ exit(EXIT_MISC);
+ }
+ (void)fprintf(stderr, "sending output to %s\n", p);
+}
+
+static void
+usage(void)
+{
+ (void)fprintf(stderr, "usage: nohup utility [argument ...]\n");
+ exit(EXIT_MISC);
+}