ACE源码分析DAEMON

 ACE源码分析DAEMON

<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

 ACE源码分析DAEMON(1)——ACE::daemonize()
后 台服务进程不属于任何一个终端会话,当然也就不用和任何用户交互,许多系统服务由后台服务进程实施;如网络服务,打印等。Windows和UNIX在实现 后台服务进程上并不统一,Windows定义的名称为SERVICE而UNIX上的名称为Daemon。对应到ACE上,对于UNIX平台ACE提供了一 个名称为ACE::daemonize()的静态方法,进程通过调用该方法即可成为后台服务进程;而对于Windows平台,ACE提供的是一个名称为 ACE_NT_Service的类,通过调用该类的一系列方法也可成为一个后台服务进程。下面分别讨论ACE::daemonize()及 ACE_NT_Service在ACE中的实现。

ACE::daemonize(UNIX)
参考APUE,UNIX平台生成daemon进程的完整步骤共7个,ACE在实现时有一步没有做。下面结合这些步骤以及ACE的实现代码分别说明:
1.Fork出新的服务进程以便父进程退出,这样可以确保子进程不是进程组的组长
pid_t pid = ACE_OS::fork ();
if (pid == -1)
return -1;
else if (pid != 0)
ACE_OS::exit (0);

2.使用SETSID创建会话并设置子进程为进程组组长,该子进程不存在关联的控制终端
ACE_OS::setsid ();
ACE_OS::signal (SIGHUP, SIG_IGN);

3.再次Fork新的服务进程,该进程不是进程组的组长并且永远不能再次获取控制终端
pid = ACE_OS::fork (program_name);
if (pid != 0)
ACE_OS::exit (0);

4.改变当前文件系统目录,因为不做这个会导致系统管理员不能卸装(umount)一个文件系统
if (pathname != 0)
ACE_OS::chdir (pathname);

5.重新设置文件的访问属性,以便我们拥有对于我们写的任何东西的完全控制
ACE_OS::umask (0);

6.关闭所有的文件句柄
if (close_all_handles)
for (int i = ACE::max_handles () - 1; i >= 0; i--)
ACE_OS::close (i);
return 0;

另外,出于安全以及健壮性考虑,即使当前进程不使用stdin、stdout、stderr,也应重新打开0、1、2三个句柄,使之对应/dev/null。但是不知道什么原因ACE的实现代码中并没有该步骤。

 

转帖只为记录,感谢原创者,来自http://blog.csdn.net/cheng168520/archive/2008/11/24/3361050.aspx

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ace技术内幕:深入解析ace架构设计与实现原理》从构架模式、编程示例和代码3个维度系统地对经典网络框架ace(adaptivemunicationenvironment)的架构设计和实现原理进行了深入分析,它能解决4个方面的问题:,帮助框架设计者领略软件框架设计的普适原则和思想,进而设计出自己的软件框架;第二,帮助ace应用开发人员加深对ace框架的理解,提升开发水平,更好地去定制和扩展ace框架,以及解决c 网络通信中的难题;第三,帮助c 开发人员加深c 语言功底,书中有大量对c 代码的分析,包括网络编程、动态库编程和异步编程等,还涉及10余个经典的设计模式的解析;第四,增强平台开发人员和软件架构师的技术修养,ace的设计和实现都极其,它的实现码和架构思想非常值得去学习和研究。 全书一共7章,详细分析ace的reactor、serviceconfigurator、task、acceptor_connector、proactor和streams等6个框架的架构设计与实现原理。每个框架的分析分为3部分:,框架的设计分析,每个框架(除task框架)都有一个构架模式与之对应,构架模式阐述了框架的设计原理,给出了框架的总体结构,是学习框架的理论基础;第二,框架的应用分析,每个框架都有一个应用实例与之对应,应用实例既帮助读者了解框架的使用方法,又为读者提供了一个可以调试的应用程序,便于读者使用调试器探索框架的内部秘密;第三,框架的实现分析,这是本书的重点,对框架的实现原理进行了详细的分析,并且对重点的类和流程给出了uml类图和uml顺序图,可以让读者在短时间内掌握框架的实现技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值