首页 > 其他 > 详细

一个守护进程实例

时间:2014-05-21 23:02:11      阅读:415      评论:0      收藏:0      [点我收藏+]

void DaemonInit(void)
{

//LOG::INF("[ServerMeeting] 服务初始化.\n");
int pid;

//如果是父进程,结束父进程,子进程继续
if(pid=fork())
{
  exit(0);
}
/*else if(pid<0) // 不可能进入
{
  exit(1); //fork失败,退出
}*/

//是第一子进程,后台继续执行
setsid();//第一子进程成为新的会话组长和进程组长

//并与控制终端分离
if(pid=fork())
{
  exit(0);//是第一子进程,结束第一子进程
}
/*else if(pid<0)
{
  exit(1);//fork失败,退出
}*/

//关闭打开的文件描述符,保留标准输入(0),标准输出(1)和标准错误输出(2)
//还可以将这3文件通过dup2重定向:error=open("/tmp/error",O_WRONLY|O_CREAT, 0600); dup2(error,2); close(error); //in=open("/tmp/in",O_RDONLY|O_CREAT,0600); if(dup2(in,0)==-1) perror("in"); close(in); //out=open("/tmp/out",O_WRONLY|O_CREAT,0600);if(dup2(out,1)==-1) perror("out"); close(out);
for(int fd=3,fdtablesize=getdtablesize();fd <fdtablesize;fd++)
{

close(fd);

}

//重设文件创建掩模
umask(0);

//信号处理
signal(SIGTTOU,SIG_IGN);
signal(SIGTTIN,SIG_IGN);
signal(SIGTSTP,SIG_IGN);
signal(SIGHUP ,SIG_IGN);
signal(SIGTERM,SIG_IGN);

//设置系统参数
struct rlimit l = {0,0};
l.rlim_cur=65535;
l.rlim_max=65535;
setrlimit(RLIMIT_NOFILE,&l);

}

一个守护进程实例,布布扣,bubuko.com

一个守护进程实例

原文:http://www.cnblogs.com/codec/p/3739119.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!