方法一: 使用传统的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 &
阅读(871) | 评论(0) | 转发(0) |