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 libc features
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
AC_CHECK_FUNCS(syslog)
|
AC_CHECK_FUNCS(daemon fork syslog)
|
||||||
if test $ac_cv_func_syslog = no; then
|
if test $ac_cv_func_syslog = no; then
|
||||||
# syslog is not in the default libraries. See if it's in some other.
|
# syslog is not in the default libraries. See if it's in some other.
|
||||||
for lib in bsd socket inet; do
|
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.
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include "daemon.h"
|
#include "daemon.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
@ -128,21 +129,28 @@ daemonize_set_user(void)
|
|||||||
static void
|
static void
|
||||||
daemonize_detach(void)
|
daemonize_detach(void)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
|
||||||
|
|
||||||
/* flush all file handles before duplicating the buffers */
|
/* flush all file handles before duplicating the buffers */
|
||||||
|
|
||||||
fflush(NULL);
|
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 */
|
/* detach from parent process */
|
||||||
|
|
||||||
pid = fork();
|
switch (fork()) {
|
||||||
if (pid < 0)
|
case -1:
|
||||||
g_error("fork() failed: %s", g_strerror(errno));
|
g_error("fork() failed: %s", g_strerror(errno));
|
||||||
|
case 0:
|
||||||
if (pid > 0)
|
break;
|
||||||
|
default:
|
||||||
/* exit the parent process */
|
/* exit the parent process */
|
||||||
_exit(EXIT_SUCCESS);
|
_exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
/* release the current working directory */
|
/* release the current working directory */
|
||||||
|
|
||||||
@ -153,6 +161,10 @@ daemonize_detach(void)
|
|||||||
|
|
||||||
setsid();
|
setsid();
|
||||||
|
|
||||||
|
#else
|
||||||
|
g_error("no support for daemonizing");
|
||||||
|
#endif
|
||||||
|
|
||||||
g_debug("daemonized!");
|
g_debug("daemonized!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user