Perl守护进程怎么用

这篇文章主要为大家展示了“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守护进程实例

Perl守护进程实例包括两部分:主程序test.c和初始化程序init.c。主程序每隔一分钟向/tmp目录中的日志test.log报告运行状态。初始化程序中的init_daemon函数负责生成Perl守护进程。读者可以利用init_daemon函数生成自己的Perl守护进程。

1.init.c清单

init.c#include<unistd.h> #include<signal.h> #include<sys/param.h> #include<sys/types.h> #include<sys/stat.h> voidinit_daemon(void)  {  intpid;  inti;  if(pid=fork())  exit(0);//是父进程,结束父进程  elseif(pid<0)  exit(1);//fork失败,退出  //是***子进程,后台继续执行  setsid();//***子进程成为新的会话组长和进程组长  //并与控制终端分离  if(pid=fork())  exit(0);//是***子进程,结束***子进程  elseif(pid<0)  exit(1);//fork失败,退出  //是第二子进程,继续  //第二子进程不再是会话组长   for(i=0;i<NOFILE;++i)//关闭打开的文件描述符  close(i);  chdir("/tmp");//改变工作目录到/tmp  umask(0);//重设文件创建掩模  return;  }

2.test.c清单test.c#include<stdio.h>

#include<time.h>  voidinit_daemon(void);//Perl守护进程初始化函数   main()  {  FILE*fp;  time_tt;  init_daemon();//初始化为Daemon   while(1)//每隔一分钟向test.log报告运行状态  {  sleep(60);//睡眠一分钟  if((fp=fopen("test.log","a"))>=0)  {  t=time(0);  fprintf(fp,"Imhereat%s\n",asctime(localtime(&t)));  fclose(fp);  }  }  }

以上程序在RedHatLinux6.0下编译通过。步骤如下:
编译:gcc-g-otestinit.ctest.c
执行:./test
查看进程:ps-ef
从输出可以发现testPerl守护进程的各种特性满足上面的要求。

以上是“Perl守护进程怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!