- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux守护进程应用研究
Linux守护进程应用研究
摘要:本文主要介绍了Linux的守护进程的概念,重点分析了守护进程的特性及如何创建守护进程,并给出了具体的实现实例。
关键词:守护进程 特性 创建守护进程
Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互。其它进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程不受用户登录注销的影响,它们一直在运行着,这种进程就是守护进程(daemon)。例如著名的apache、telnet、ftp等服务程序都是守护进程。除了服务进程外,守护进程还可以配合shell编程,设计出适合用户自己的新功能,更好地维护系统,大大提高工作效率。比如,作业规划进程crond。下面来介绍一下守护进程的特性及如何创建守护进程。
1 守护进程的特性
1.1 所有的守护进程都是以超级用户启动的(UID为0),所以编写守护进程时要格外小心,编写不好的守护进程很可能对系统造成威胁。
1.2 没有一个守护进程具有控制终端,其终端名设置为问号(?),在后台运行。
1.3 守护进程不存在父进程,双亲的进程都为1,即init进程。
1.4 所有用户层守护进程都是进程组的组长进程以及会话的首进程,而且是这些进程组和会话中的唯一进程。
具有以上特征的进程就是守护进程,编写守护进程的关键实际上就是要满足守护进程的特性。
2 守护进程的编写步骤
2.1 让init进程成为新产生进程的父进程 程序运行后首先调用for函数创建子进程,并让父进程退出。这样,产生的子进程将变成孤儿进程,并被inti进程接管,同时,所产生的新进程将变为在后台运行。
2.2 调用setsid函数 通过调用setsid函数,使得新创建的进程脱离控制终端,同时创建新的进程组,并成为该进程组的首进程。这个步骤是创建守护最重要的一步,为了更好地理解这一步骤,下面介绍一下进程组、会话的基本概念。
在Linux系统中,每个进程都属于各自的进程组。进程组是一个或多个进程的集合。每个进程组都有类似于进程号的标识,称为进程组ID。进程组ID是由首进程的进程号决定的,每个进程组都存在一个首进程。
会话是一个或多个进程组的集合。与进程组类似,每个会话都存在一个首进程。
会话和进程组是Linux内核管理多用户情况下用户进程的方法。每个进程都属于一个进程组,而进程组又属于某个会话。当用户从终端登录系统,系统会创建一个新的会话。在该终端上启动的进程都会被系统划归到会话的进程组中。
会话中的进程是通过该会话中的首进程与终端相连的。该终端即是会话的控制终端。一个会话只能有一个控制终端。如果会话存在一个控制终端,则它必然拥有一个前台进程组。属于该组的进程可以从控制终端获得输入,而其他的进程组都为后台进程组。
由于守护进程没有控制终端,使用fork函数创建的子进程继承了父进程的控制终端、会话和进程组,因此,必须创建新的会话,以脱离父进程的影响。setsid函数就是用于创建新会话的。
setsid函数创建新会话,并使得调用setsid函数的进程成为新会话的首进程。调用setsid函数的进程是新创建会话中的惟一的进程组,进程组ID为调用进程的进程号,同时要求调用进程不为一个进程的首进程。由于在第一步中调用fork的父进程退出,使得子进程不可能是进程组的首进程。该会话的首进程没有控制终端与其相连。至此,满足了守护进程没有控制终端的要求。
2.3 改变当前目录为根目录 使用fork函数产生的子进程将继承父进程的工作目录,当进程没有结束时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。更改工作目录使用的函数是chdir。
2.4 重设文件权限掩码 文件权限掩码是用来屏蔽文件权限中的对应位的。由于使用fork函数新建的子进程继承了父进程的文件权限掩码,这会给子进程使用文件带来了很多麻烦。因此,把文件权限掩码设置为0,可以大大增强该守护进程的灵活性。设置文件权限掩码的函数是umask。
2.5 关闭文件描述符 进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。关闭它们的方法是:
for(i=0;iMAXFILE;i++)
close(i);
3 守护进程实例
下面给出一个创建守护进程的实例,该守护进程实例包括两部分:主程序main.c和初始化程序init.c。主程序每隔10秒向目录/tmp中的日志daemon.log报告运行状态。初始化程序中的init_daemon函数负责生成守护进程。
3.1 初始化程序i
您可能关注的文档
- LCLCBD与传统开腹取石术在治疗老年胆道结石合并感染中疗效对比分析.doc
- LCMB899产品显示故障分析和解决方案.doc
- LCMSMS法分析人体内25羟基维生素D2和25羟基维生素D3浓度系统综述.doc
- LCP内固定治疗老年骨质疏松肱骨近端粉碎性骨折临床应用研究.doc
- LCOS光引擎亮度理论分析与估计.doc
- LCP微创治疗胫骨中下段骨折临床疗效分析.doc
- LCT联合HPV检测在宫颈癌前病变诊断中应用价值观察.doc
- LC―MSMS 法测定乌苯美司及甲氨蝶呤在临床药物相互作用中应用.doc
- LC―MSMS法测定人血浆中多粘菌素E浓度分析方法建立.doc
- LC―MSMS法测定大鼠血浆中阿霉素药物浓度及应用.doc
文档评论(0)