use daemon() when the C library provides it
For systems that cannot support fork() (like no-mmu Linux), use daemon() if it is available for the daemonizing code. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
c3e02bec3b
commit
499ed62dd7
@ -100,7 +100,7 @@ dnl
|
||||
dnl libc features
|
||||
dnl
|
||||
|
||||
AC_CHECK_FUNCS(syslog)
|
||||
AC_CHECK_FUNCS(daemon fork syslog)
|
||||
if test $ac_cv_func_syslog = no; then
|
||||
# syslog is not in the default libraries. See if it's in some other.
|
||||
for lib in bsd socket inet; do
|
||||
|
24
src/daemon.c
24
src/daemon.c
@ -17,6 +17,7 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "daemon.h"
|
||||
|
||||
#include <glib.h>
|
||||
@ -128,21 +129,28 @@ daemonize_set_user(void)
|
||||
static void
|
||||
daemonize_detach(void)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
/* flush all file handles before duplicating the buffers */
|
||||
|
||||
fflush(NULL);
|
||||
|
||||
#ifdef HAVE_DAEMON
|
||||
|
||||
if (daemon(0, 1))
|
||||
g_error("daemon() failed: %s", g_strerror(errno));
|
||||
|
||||
#elif defined(HAVE_FORK)
|
||||
|
||||
/* detach from parent process */
|
||||
|
||||
pid = fork();
|
||||
if (pid < 0)
|
||||
switch (fork()) {
|
||||
case -1:
|
||||
g_error("fork() failed: %s", g_strerror(errno));
|
||||
|
||||
if (pid > 0)
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
/* exit the parent process */
|
||||
_exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
/* release the current working directory */
|
||||
|
||||
@ -153,6 +161,10 @@ daemonize_detach(void)
|
||||
|
||||
setsid();
|
||||
|
||||
#else
|
||||
g_error("no support for daemonizing");
|
||||
#endif
|
||||
|
||||
g_debug("daemonized!");
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user