以Daemon方式运行
主页 上一层 获得本机IP 对方连接本机的哪个IP? 如何使用DNS 文件流方式 读取一行语句 不定长参数 以Daemon方式运行 端口重用 用户登录及权限设置

 

如何将程序以Daemon方式运行?

以Daemon方式运行的程序,在运行过程中与控制台无关,即不受控制台信号影响,在控制台退出后也继续保持运行,而其他非Daemon程序会受控制台操作影响,并在控制台退出时被强行退出。因此网络服务程序绝大多数都是以Daemon方式运行。

可以在程序初始化时加入以下语句,则程序将以Daemon方式运行:

/* 生成一个新的进程并将原来的主进程退出 */

if(fork()) exit(0);

 

/* 关闭 stdin, stdout, stderr 等控制台句柄 */

for (n = 0; n<3; n++) close(n);

 

/* 将 stdin, stdout和stderr均指向/dev/null */

open("/dev/null", O_RDONLY);

dup2(0,1);

dup2(0,2);

 

/* 设置tty的I/O属性 */

if((n=open("/dev/tty",O_RDWR)) > 0) {

ioctl(n, TIOCNOTTY, 0) ;

close(n);

}

 

/* 创建一个新的session,使当前进程成为一个process greoup的leader */

setsid();

 

/* 生成一个新的进程并将刚才生成的进程退出,这个新的进程已经以daemon方式运行了 */

if(fork()) exit(0);