如何在REHL 下创建daemon进程

方法一: 使用传统的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 */

 

方法二: 调用daemon()函数。

示例代码如下:

daemon(1, 0);

有些系统不支持daemon函数。不过如果程序只在linux下运行,那就完全兼容。

方法三:使用nohup

如果在退出远程终端“进程不退出”,那么需要的也许只是处理一下SIGHUP。
   使用命令:
     nohup yourCommand &

你可能感兴趣的:(linux,session,File,终端,Signal)