REHLでdaemonプロセスを作成する方法


方法1:従来のfork()関数を使用する.
サンプルコードは次のとおりです.static void daemon_init ( const char * workdir, mode_t mask )
{
int i, j
;

// change working directory, this step is optional

   chdir( "/tmp" ) ;

   //parent terminates

if ( 0 ! = fork( ) ) { exit ( EXIT_SUCCESS ) ; }
/* first child continues become session leader */
setsid( ) ;
Signal ( SIGHUP, SIG_IGN ) ;
  
//first child terminates
if ( 0 ! = Fork( ) ) { exit ( EXIT_SUCCESS ) ; }
/*
* second child continues change working directory, chdir( "/" )
*/

chdir( workdir ) ;
/* clear our file mode creation mask, umask( 0 )*/
    umask( mask ) ;
   j = Open ( "/dev/null" , O_RDWR ) ;
   dup2( j, 0 ) ;
   dup2( j, 1 ) ;
   dup2( j, 2 ) ;
   j = getdtablesize( ) ;
   for ( i = 3; i < j; i+ + ) {
    close ( i ) ;
   }
   return ;
} /* end of daemon_init */

 
方法2:daemon()関数を呼び出す.
サンプルコードは、daemon(1,0);一部のシステムではdaemon関数がサポートされていません.ただし、プログラムがlinuxでのみ実行される場合は、完全に互換性があります.方法3:nohupを用いてリモート端末を終了する「プロセスが終了しない」場合は,SIGHUPを処理するだけでよいかもしれない.使用コマンド:nohup yourCommand&