自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實例解析Perl守護進程用法

開發(fā) 架構(gòu)
Perl守護進程是一種很有用的進程。Linux的大多數(shù)服務(wù)器就是用Perl守護進程實現(xiàn)的。比如,Internet服務(wù)器inetd,Web服務(wù)器httpd等。

本文和大家重點討論一下Perl守護進程的概念,Perl守護進程(Daemon)是運行在后臺的一種特殊進程。它獨立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。

Perl守護進程

LinuxPerl守護進程的編程方法

Perl守護進程(Daemon)是運行在后臺的一種特殊進程。它獨立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。Perl守護進程是一種很有用的進程。Linux的大多數(shù)服務(wù)器就是用Perl守護進程實現(xiàn)的。比如,Internet服務(wù)器inetd,Web服務(wù)器httpd等。同時,Perl守護進程完成許多系統(tǒng)任務(wù)。比如,作業(yè)規(guī)劃進程crond,打印進程lpd等。
Perl守護進程的編程本身并不復(fù)雜,復(fù)雜的是各種版本的Unix的實現(xiàn)機制不盡相同,造成不同Unix環(huán)境下Perl守護進程的編程規(guī)則并不一致。這需要讀者注意,照搬某些書上的規(guī)則(特別是BSD4.3和低版本的SystemV)到Linux會出現(xiàn)錯誤的。下面將全面介紹Linux下Perl守護進程的編程要點并給出詳細實例。

一.Perl守護進程及其特性

Perl守護進程最重要的特性是后臺運行。在這一點上DOS下的常駐內(nèi)存程序TSR與之相似。其次,Perl守護進程必須與其運行前的環(huán)境隔離開來。這些環(huán)境包括未關(guān)閉的文件描述符,控制終端,會話和進程組,工作目錄以及文件創(chuàng)建掩模等。這些環(huán)境通常是Perl守護進程從執(zhí)行它的父進程(特別是shell)中繼承下來的。***,Perl守護進程的啟動方式有其特殊之處。它可以在Linux系統(tǒng)啟動時從啟動腳本/etc/rc.d中啟動,可以由作業(yè)規(guī)劃進程crond啟動,還可以由用戶終端(通常是shell)執(zhí)行。
總之,除開這些特殊性以外,Perl守護進程與普通進程基本上沒有什么區(qū)別。因此,編寫Perl守護進程實際上是把一個普通進程按照上述的Perl守護進程的特性改造成為Perl守護進程。如果讀者對進程有比較深入的認識就更容易理解和編程了。

二、Perl守護進程實例

Perl守護進程實例包括兩部分:主程序test.c和初始化程序init.c。主程序每隔一分鐘向/tmp目錄中的日志test.log報告運行狀態(tài)。初始化程序中的init_daemon函數(shù)負責生成Perl守護進程。讀者可以利用init_daemon函數(shù)生成自己的Perl守護進程。

1.init.c清單 

  1. init.c#include<unistd.h> 
  2. #include<signal.h> 
  3. #include<sys/param.h> 
  4. #include<sys/types.h> 
  5. #include<sys/stat.h> 
  6. voidinit_daemon(void)  
  7. {  
  8. intpid;  
  9. inti;  
  10. if(pid=fork())  
  11. exit(0);//是父進程,結(jié)束父進程  
  12. elseif(pid<0)  
  13. exit(1);//fork失敗,退出  
  14. //是***子進程,后臺繼續(xù)執(zhí)行  
  15. setsid();//***子進程成為新的會話組長和進程組長  
  16. //并與控制終端分離  
  17. if(pid=fork())  
  18. exit(0);//是***子進程,結(jié)束***子進程  
  19. elseif(pid<0)  
  20. exit(1);//fork失敗,退出  
  21. //是第二子進程,繼續(xù)  
  22. //第二子進程不再是會話組長  
  23.  
  24. for(i=0;i<NOFILE;++i)//關(guān)閉打開的文件描述符  
  25. close(i);  
  26. chdir("/tmp");//改變工作目錄到/tmp  
  27. umask(0);//重設(shè)文件創(chuàng)建掩模  
  28. return;  
  29. }  
  30.  

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

  1. #include<time.h> 
  2.  
  3. voidinit_daemon(void);//Perl守護進程初始化函數(shù)  
  4.  
  5. main()  
  6. {  
  7. FILE*fp;  
  8. time_tt;  
  9. init_daemon();//初始化為Daemon  
  10.  
  11. while(1)//每隔一分鐘向test.log報告運行狀態(tài)  
  12. {  
  13. sleep(60);//睡眠一分鐘  
  14. if((fp=fopen("test.log","a"))>=0)  
  15. {  
  16. t=time(0);  
  17. fprintf(fp,"Imhereat%s\n",asctime(localtime(&t)));  
  18. fclose(fp);  
  19. }  
  20. }  
  21. }  
  22.  

 以上程序在RedHatLinux6.0下編譯通過。步驟如下:
編譯:gcc-g-otestinit.ctest.c
執(zhí)行:./test
查看進程:ps-ef
從輸出可以發(fā)現(xiàn)testPerl守護進程的各種特性滿足上面的要求。
zt:http://swallor.blogdriver.com/swallor/567186.html

【編輯推薦】

 

  1. 應(yīng)用Perl多進程技術(shù)到自動化測試腳本
  2. Perl多進程概念解析
  3. 解析四大Perl操作符用法
  4. 術(shù)語匯編 Perl多進程概念詳解
  5. 實例解析Perl多進程技術(shù)在自動化測試中的應(yīng)用
責任編輯:佚名 來源: csdn.net
點贊
收藏

51CTO技術(shù)棧公眾號