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