1 /* vi: set sw=4 ts=4: */
3 * Rexec program for system have fork() as vfork() with foreground option
5 * Copyright (C) Vladimir N. Oleynik <dzo@simtreas.ru>
6 * Copyright (C) 2003 Russ Dill <Russ.Dill@asu.edu>
8 * daemon() portion taken from uClibc:
10 * Copyright (c) 1991, 1993
11 * The Regents of the University of California. All rights reserved.
13 * Modified for uClibc by Erik Andersen <andersee@debian.org>
15 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
22 void vfork_daemon_rexec(int nochdir, int noclose, char **argv)
32 /* if "/dev/null" doesn't exist, bail out! */
33 fd = xopen(bb_dev_null, O_RDWR);
34 dup2(fd, STDIN_FILENO);
35 dup2(fd, STDOUT_FILENO);
36 dup2(fd, STDERR_FILENO);
43 /* Make certain we are not a session leader, or else we
44 * might reacquire a controlling terminal */
47 /* High-order bit of first char in argv[0] is a hidden
48 * "we have (alrealy) re-execed, don't do it again" flag */
50 execv(CONFIG_BUSYBOX_EXEC_PATH, argv);
51 bb_perror_msg_and_die("exec %s", CONFIG_BUSYBOX_EXEC_PATH);
53 bb_perror_msg_and_die("vfork");