- patch from Denis Vlasenko to add and use bb_xdaemon()
This commit is contained in:
parent
dac7ff15b7
commit
2c99851181
@ -275,8 +275,7 @@ start_stop_daemon_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
*--argv = startas;
|
*--argv = startas;
|
||||||
if (opt & SSD_OPT_BACKGROUND) {
|
if (opt & SSD_OPT_BACKGROUND) {
|
||||||
if (daemon(0, 0) == -1)
|
bb_xdaemon(0, 0);
|
||||||
bb_perror_msg_and_die ("unable to fork");
|
|
||||||
setsid();
|
setsid();
|
||||||
}
|
}
|
||||||
if (opt & SSD_OPT_MAKEPID) {
|
if (opt & SSD_OPT_MAKEPID) {
|
||||||
|
@ -146,6 +146,7 @@ extern void bb_fflush_stdout_and_exit(int retval) ATTRIBUTE_NORETURN;
|
|||||||
|
|
||||||
extern void xstat(const char *filename, struct stat *buf);
|
extern void xstat(const char *filename, struct stat *buf);
|
||||||
extern int bb_xsocket(int domain, int type, int protocol);
|
extern int bb_xsocket(int domain, int type, int protocol);
|
||||||
|
extern void bb_xdaemon(int nochdir, int noclose);
|
||||||
|
|
||||||
#define BB_GETOPT_ERROR 0x80000000UL
|
#define BB_GETOPT_ERROR 0x80000000UL
|
||||||
extern const char *bb_opt_complementally;
|
extern const char *bb_opt_complementally;
|
||||||
|
@ -30,7 +30,7 @@ LIBBB-y:= \
|
|||||||
trim.c u_signal_names.c vdprintf.c verror_msg.c \
|
trim.c u_signal_names.c vdprintf.c verror_msg.c \
|
||||||
vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c xstat.c \
|
vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c xstat.c \
|
||||||
xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c xgetlarg.c \
|
xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c xgetlarg.c \
|
||||||
bb_xsocket.c \
|
bb_xsocket.c bb_xdaemon.c \
|
||||||
get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \
|
get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \
|
||||||
getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \
|
getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \
|
||||||
perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \
|
perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \
|
||||||
|
17
libbb/bb_xdaemon.c
Normal file
17
libbb/bb_xdaemon.c
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
/* vi: set sw=4 ts=4: */
|
||||||
|
/*
|
||||||
|
* bb_xdaemon.c - a daemon() which dies on failure with error message
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Denis Vlasenko
|
||||||
|
*
|
||||||
|
* Licensed under LGPL, see file docs/lesser.txt in this tarball for details.
|
||||||
|
*/
|
||||||
|
#include <unistd.h>
|
||||||
|
#include "libbb.h"
|
||||||
|
|
||||||
|
void bb_xdaemon(int nochdir, int noclose)
|
||||||
|
{
|
||||||
|
if (daemon(nochdir, noclose))
|
||||||
|
bb_perror_msg_and_die("daemon");
|
||||||
|
}
|
||||||
|
|
@ -1,3 +1,4 @@
|
|||||||
|
/* vi: set sw=4 ts=4: */
|
||||||
/*
|
/*
|
||||||
* crond -d[#] -c <crondir> -f -b
|
* crond -d[#] -c <crondir> -f -b
|
||||||
*
|
*
|
||||||
@ -213,9 +214,7 @@ int crond_main(int ac, char **av)
|
|||||||
/* reexec for vfork() do continue parent */
|
/* reexec for vfork() do continue parent */
|
||||||
vfork_daemon_rexec(1, 0, ac, av, "-f");
|
vfork_daemon_rexec(1, 0, ac, av, "-f");
|
||||||
#else /* uClinux */
|
#else /* uClinux */
|
||||||
if (daemon(1, 0) < 0) {
|
bb_xdaemon(1, 0);
|
||||||
bb_perror_msg_and_die("daemon");
|
|
||||||
}
|
|
||||||
#endif /* uClinux */
|
#endif /* uClinux */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,8 +40,7 @@ int watchdog_main(int argc, char **argv)
|
|||||||
if (optind < argc - 1 || argc == 1)
|
if (optind < argc - 1 || argc == 1)
|
||||||
bb_show_usage();
|
bb_show_usage();
|
||||||
|
|
||||||
if (daemon(0, 1) < 0)
|
bb_xdaemon(0, 1);
|
||||||
bb_perror_msg_and_die("Failed forking watchdog daemon");
|
|
||||||
|
|
||||||
signal(SIGHUP, watchdog_shutdown);
|
signal(SIGHUP, watchdog_shutdown);
|
||||||
signal(SIGINT, watchdog_shutdown);
|
signal(SIGINT, watchdog_shutdown);
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
* Copyright (C) 2005 Roberto A. Foglietta (me@roberto.foglietta.name)
|
* Copyright (C) 2005 Roberto A. Foglietta (me@roberto.foglietta.name)
|
||||||
* Copyright (C) 2005 Odd Arild Olsen (oao at fibula dot no)
|
* Copyright (C) 2005 Odd Arild Olsen (oao at fibula dot no)
|
||||||
* Copyright (C) 2003 Paul Sheer
|
* Copyright (C) 2003 Paul Sheer
|
||||||
|
*
|
||||||
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
*
|
*
|
||||||
* Odd Arild Olsen started out with the sheerdns [1] of Paul Sheer and rewrote
|
* Odd Arild Olsen started out with the sheerdns [1] of Paul Sheer and rewrote
|
||||||
@ -408,9 +409,7 @@ int dnsd_main(int argc, char **argv)
|
|||||||
/* reexec for vfork() do continue parent */
|
/* reexec for vfork() do continue parent */
|
||||||
vfork_daemon_rexec(1, 0, argc, argv, "-d");
|
vfork_daemon_rexec(1, 0, argc, argv, "-d");
|
||||||
#else /* uClinux */
|
#else /* uClinux */
|
||||||
if (daemon(1, 0) < 0) {
|
bb_xdaemon(1, 0);
|
||||||
bb_perror_msg_and_die("daemon");
|
|
||||||
}
|
|
||||||
#endif /* uClinuvx */
|
#endif /* uClinuvx */
|
||||||
|
|
||||||
dnsentryinit(is_verbose());
|
dnsentryinit(is_verbose());
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
/* vi: set sw=4 ts=4: */
|
||||||
/*
|
/*
|
||||||
* httpd implementation for busybox
|
* httpd implementation for busybox
|
||||||
*
|
*
|
||||||
@ -2114,8 +2115,7 @@ int httpd_main(int argc, char *argv[])
|
|||||||
|
|
||||||
#if !ENABLE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
|
#if !ENABLE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
|
||||||
# if !DEBUG
|
# if !DEBUG
|
||||||
if (daemon(1, 0) < 0) /* don`t change curent directory */
|
bb_xdaemon(1, 0); /* don`t change curent directory */
|
||||||
bb_perror_msg_and_die("daemon");
|
|
||||||
# endif
|
# endif
|
||||||
return miniHttpd(server);
|
return miniHttpd(server);
|
||||||
#else
|
#else
|
||||||
|
@ -1314,7 +1314,7 @@ inetd_main (int argc, char *argv[])
|
|||||||
/* reexec for vfork() do continue parent */
|
/* reexec for vfork() do continue parent */
|
||||||
vfork_daemon_rexec (0, 0, argc, argv, "-f");
|
vfork_daemon_rexec (0, 0, argc, argv, "-f");
|
||||||
#else
|
#else
|
||||||
daemon (0, 0);
|
daemon (0, 0); /* bb_xdaemon? */
|
||||||
#endif /* uClinux */
|
#endif /* uClinux */
|
||||||
} else {
|
} else {
|
||||||
setsid ();
|
setsid ();
|
||||||
@ -1802,3 +1802,4 @@ daytime_dg (int s, servtab_t *sep ATTRIBUTE_UNUSED)
|
|||||||
(void) sendto (s, buffer, strlen (buffer), 0, &sa, sizeof (sa));
|
(void) sendto (s, buffer, strlen (buffer), 0, &sa, sizeof (sa));
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME */
|
#endif /* CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME */
|
||||||
|
/* vi: set sw=4 ts=4: */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* vi:set ts=4:*/
|
/* vi: set sw=4 ts=4: */
|
||||||
/*
|
/*
|
||||||
* Simple telnet server
|
* Simple telnet server
|
||||||
* Bjorn Wesen, Axis Communications AB (bjornw@axis.com)
|
* Bjorn Wesen, Axis Communications AB (bjornw@axis.com)
|
||||||
@ -469,9 +469,7 @@ telnetd_main(int argc, char **argv)
|
|||||||
bb_perror_msg_and_die("listen");
|
bb_perror_msg_and_die("listen");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (daemon(0, 0) < 0)
|
bb_xdaemon(0, 0);
|
||||||
bb_perror_msg_and_die("daemon");
|
|
||||||
|
|
||||||
|
|
||||||
maxfd = master_fd;
|
maxfd = master_fd;
|
||||||
#endif /* CONFIG_FEATURE_TELNETD_INETD */
|
#endif /* CONFIG_FEATURE_TELNETD_INETD */
|
||||||
|
@ -121,8 +121,7 @@ int klogd_main(int argc, char **argv)
|
|||||||
#if defined(__uClinux__)
|
#if defined(__uClinux__)
|
||||||
vfork_daemon_rexec(0, 1, argc, argv, "-n");
|
vfork_daemon_rexec(0, 1, argc, argv, "-n");
|
||||||
#else /* __uClinux__ */
|
#else /* __uClinux__ */
|
||||||
if (daemon(0, 1) < 0)
|
bb_xdaemon(0, 1);
|
||||||
bb_perror_msg_and_die("daemon");
|
|
||||||
#endif /* __uClinux__ */
|
#endif /* __uClinux__ */
|
||||||
}
|
}
|
||||||
doKlogd(console_log_level);
|
doKlogd(console_log_level);
|
||||||
|
@ -673,8 +673,7 @@ int syslogd_main(int argc, char **argv)
|
|||||||
#if defined(__uClinux__)
|
#if defined(__uClinux__)
|
||||||
vfork_daemon_rexec(0, 1, argc, argv, "-n");
|
vfork_daemon_rexec(0, 1, argc, argv, "-n");
|
||||||
#else /* __uClinux__ */
|
#else /* __uClinux__ */
|
||||||
if(daemon(0, 1) < 0)
|
bb_xdaemon(0, 1);
|
||||||
bb_perror_msg_and_die("daemon");
|
|
||||||
#endif /* __uClinux__ */
|
#endif /* __uClinux__ */
|
||||||
}
|
}
|
||||||
doSyslogd();
|
doSyslogd();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user