From 22cf0c5def2e57a9cb18a71e9eb9c2fa04415e36 Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Sat, 12 Jan 2002 00:17:28 +0000 Subject: [PATCH] - ngIRCd wandelt sich nun selber in einen Daemon (Hintergrundprozess) um. --- src/ngircd/ngircd.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/ngircd/ngircd.c b/src/ngircd/ngircd.c index 71b5fc48..6add9fb7 100644 --- a/src/ngircd/ngircd.c +++ b/src/ngircd/ngircd.c @@ -9,11 +9,14 @@ * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. * - * $Id: ngircd.c,v 1.18 2002/01/11 14:45:18 alex Exp $ + * $Id: ngircd.c,v 1.19 2002/01/12 00:17:28 alex Exp $ * * ngircd.c: Hier beginnt alles ;-) * * $Log: ngircd.c,v $ + * Revision 1.19 2002/01/12 00:17:28 alex + * - ngIRCd wandelt sich nun selber in einen Daemon (Hintergrundprozess) um. + * * Revision 1.18 2002/01/11 14:45:18 alex * - Kommandozeilen-Parser implementiert: Debug- und No-Daemon-Modus, Hilfe. * @@ -83,9 +86,11 @@ #include #include +#include #include #include #include +#include #include #include #include @@ -114,7 +119,7 @@ LOCAL VOID Show_Help( VOID ); GLOBAL INT main( INT argc, CONST CHAR *argv[] ) { BOOLEAN ok; - INT i, n; + INT pid, i, n; /* Datentypen der portab-Library ueberpruefen */ portab_check_types( ); @@ -197,6 +202,29 @@ GLOBAL INT main( INT argc, CONST CHAR *argv[] ) while( ! NGIRCd_Quit ) { + /* In der Regel wird ein Sub-Prozess ge-fork()'t, der + * nicht mehr mit dem Terminal verbunden ist. Mit der + * Option "--nodaemon" kann dies (z.B. zum Debuggen) + * verhindert werden. */ + if( ! NGIRCd_NoDaemon ) + { + /* Daemon im Hintergrund erzeugen */ + pid = fork( ); + if( pid > 0 ) + { + /* "alter" Prozess */ + exit( 0 ); + } + if( pid < 0 ) + { + /* Fehler */ + printf( PACKAGE": Can't fork: %s!\nFatal error, exiting now ...", strerror( errno )); + exit( 1 ); + } + setsid( ); + chdir( "/" ); + } + /* Globale Variablen initialisieren */ NGIRCd_Start = time( NULL ); strftime( NGIRCd_StartStr, 64, "%a %b %d %Y at %H:%M:%S (%Z)", localtime( &NGIRCd_Start )); -- 2.39.2