千家信息网

Perl守护进程概念是什么

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍了Perl守护进程概念是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Perl守护进程LinuxPerl守护进程的
千家信息网最后更新 2025年11月08日Perl守护进程概念是什么

这篇文章主要介绍了Perl守护进程概念是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Perl守护进程

LinuxPerl守护进程的编程方法

Perl守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。Perl守护进程是一种很有用的进程。Linux的大多数服务器就是用Perl守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,Perl守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
Perl守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同Unix环境下Perl守护进程的编程规则并不一致。这需要读者注意,照搬某些书上的规则(特别是BSD4.3和低版本的SystemV)到Linux会出现错误的。下面将全面介绍Linux下Perl守护进程的编程要点并给出详细实例。

一.Perl守护进程及其特性

Perl守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,Perl守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是Perl守护进程从执行它的父进程(特别是shell)中继承下来的。***,Perl守护进程的启动方式有其特殊之处。它可以在Linux系统启动时从启动脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。
总之,除开这些特殊性以外,Perl守护进程与普通进程基本上没有什么区别。因此,编写Perl守护进程实际上是把一个普通进程按照上述的Perl守护进程的特性改造成为Perl守护进程。如果读者对进程有比较深入的认识就更容易理解和编程了。

二.Perl守护进程的编程要点

前面讲过,不同Unix环境下Perl守护进程的编程规则并不一致。所幸的是Perl守护进程的编程原则其实都一样,区别在于具体的实现细节不同。这个原则就是要满足Perl守护进程的特性。同时,Linux是基于SyetemV的SVR4并遵循Posix标准,实现起来与BSD4相比更方便。编程要点如下;

1.在后台运行。

为避免挂起控制终端将Daemon放入后台执行。方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。
if(pid=fork())
exit(0);//是父进程,结束父进程,子进程继续

2.脱离控制终端,登录会话和进程组

有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。
控制终端,登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们,使之不受它们的影响。方法是在第1点的基础上,调用setsid()使进程成为会话组长:
setsid();
说明:当进程是会话组长时setsid()调用失败。但***点已经保证进程不是会话组长。setsid()调用成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性,进程同时与控制终端脱离。

3.禁止进程重新打开控制终端

现在,进程已经成为无终端的会话组长。但它可以重新申请打开一个控制终端。可以通过使进程不再成为会话组长来禁止进程重新打开控制终端:
if(pid=fork())
exit(0);//结束***子进程,第二子进程继续(第二子进程不再是会话组长)

4.关闭打开的文件描述符

进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费系统资源,造成进程所在的文件系统无法卸下以及引起无法预料的错误。按如下方法关闭它们:
for(i=0;i关闭打开的文件描述符close(i);

5.改变当前工作目录

进程活动时,其工作目录所在的文件系统不能卸下。一般需要将工作目录改变到根目录。对于需要转储核心,写运行日志的进程将工作目录改变到特定目录如/tmpchdir("/")

6.重设文件创建掩模

进程从创建它的父进程那里继承了文件创建掩模。它可能修改Perl守护进程所创建的文件的存取位。为防止这一点,将文件创建掩模清除:umask(0);

7.处理SIGCHLD信号

处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将SIGCHLD信号的操作设为SIG_IGN。
signal(SIGCHLD,SIG_IGN);
这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程。

感谢你能够认真阅读完这篇文章,希望小编分享的"Perl守护进程概念是什么"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

进程 终端 控制 文件 组长 编程 目录 系统 登录 后台 服务器 环境 工作 服务 运行 不同 同时 就是 方法 特性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中药有效成分最新数据库 软件开发没有成本票 计算机软件开发接单 数据库的常用基本命令结论 成都软件开发技术学习网站 手游方舟怎么看服务器人数 网络安全知识竞赛高中部 连接网络安全密钥是什么意思 搭数据库的条件 软件开发能形成产业链吗 以下属于nosql数据库的特点 致信服务器IP是什么 临汾商城分销软件开发多少钱 ios软件开发文献综述 河北安卓软件开发如何收费 关于网络安全的思考讨论 查询数据库中值为空的数据 企业软件开发应用实施经验 韩立刚 数据库 苹果谷歌服务器名字 网络安全法六大看法 db2数据库打开自动备份 黄浦区推广软件开发近期价格 陕西戴尔服务器续保调试 连接网络安全密钥是什么意思 岳西市网络安全教育局 支持多种软件开发的模型是什么 上海童臣网络技术有限公司 数据库通过什么语句可以插入数据 反射机制访问数据库
0