精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用PHP腳本來寫Daemon程序

開發 后端 前端
為什么一定要使用daemon進程呢?Linux中每一個系統與用戶進行交流的界面稱為終端(terminal),每一個從此終端開始運行的進程都會依附于這個終端,這個終端就稱為這些進程的控制終端(Controlling terminal),當控制終端被關閉時,相應的進程都會被自動關閉。

這又是一個有趣的概念,daemon在英語中是"精靈"的意思,就像我們經常在迪斯尼動畫里見到的那些,有些會飛,有些不會,經常圍著動畫片的主人公轉來轉去,啰里啰唆地提一些忠告,時不時倒霉地撞在柱子上,有時候還會想出一些小小的花招,把主人公從敵人手中救出來,正因如此,daemon有時也被譯作"守護神"。所以,daemon進程在國內也有兩種譯法,有些人譯作"精靈進程",有些人譯作"守護進程",這兩種稱呼的出現頻率都很高。

與真正的daemon相似,daemon進程也習慣于把自己隱藏在人們的視線之外,默默為系統做出貢獻,有時人們也把它們稱作"后臺服務進程"。daemon進程的壽命很長,一般來說,從它們一被執行開始,直到整個系統關閉,它們才會退出。幾乎所有的服務器程序,包括我們熟知的Apache和wu-FTP,都用daemon進程的形式實現。很多Linux下常見的命令如inetd和ftpd,末尾的字母d就是指daemon。

為什么一定要使用daemon進程呢?Linux中每一個系統與用戶進行交流的界面稱為終端(terminal),每一個從此終端開始運行的進程都會依附于這個終端,這個終端就稱為這些進程的控制終端(Controlling terminal),當控制終端被關閉時,相應的進程都會被自動關閉。關于這點,讀者可以用X-Window中的XTerm試驗一下,(每一個XTerm就是一個打開的終端,)我們可以通過鍵入命令啟動應用程序,比如:$netscape 然后我們關閉XTerm窗口,剛剛啟動的netscape窗口也會隨之一同突然蒸發。但是daemon進程卻能夠突破這種限制,即使對應的終端關閉,它也能在系統中長久地存在下去,如果我們想讓某個進程長命百歲,不因為用戶或終端或其他的變化而受到影響,就必須把這個進程變成一個daemon進程。

1. Daemon進程的編程規則

如果想把自己的進程變成daemon進程,我們必須嚴格按照以下步驟進行:

1、調用fork產生一個子進程,同時父進程退出。我們所有后續工作都在子進程中完成。這樣做我們可以:

1.1 如果我們是從命令行執行的該程序,這可以造成程序執行完畢的假象,shell會回去等待下一條命令;

1.2 剛剛通過fork產生的新進程一定不會是一個進程組的組長,這為第2步的執行提供了前提保障。

這樣做還會出現一種很有趣的現象:由于父進程已經先于子進程退出,會造成子進程沒有父進程,變成一個孤兒進程(orphan)。每當系統發現一個孤兒進程,就會自動由1號進程收養它,這樣,原先的子進程就會變成1號進程的子進程。

2、調用setsid系統調用。

這是整個過程中最重要的一步。setsid的介紹見附錄2,它的作用是創建一個新的會話(session),并自任該會話的組長(session leader)。如果調用進程是一個進程組的組長,調用就會失敗,但這已經在第1步得到了保證。調用setsid有3個作用:

2.1 讓進程擺脫原會話的控制;

2.2 讓進程擺脫原進程組的控制;

2.3 讓進程擺脫原控制終端的控制;

總之,就是讓調用進程完全獨立出來,脫離所有其他進程的控制。

3、把當前工作目錄切換到根目錄。

如果我們是在一個臨時加載的文件系統上執行這個進程的,比如:/mnt/floppy/,該進程的當前工作目錄就會是/mnt/floppy/。在整個進程運行期間該文件系統都無法被卸下(umount),而無論我們是否在使用這個文件系統,這會給我們帶來很多不便。解決的方法是使用chdir系統調用把當前工作目錄變為根目錄,應該不會有人想把根目錄卸下吧。

關于chdir的用法,參見附錄1。

當然,在這一步里,如果有特殊的需要,我們也可以把當前工作目錄換成其他的路徑,比如/tmp。

4、將文件權限掩碼設為0。

這需要調用系統調用umask,參見附錄3。每個進程都會從父進程那里繼承一個文件權限掩碼,當創建新文件時,這個掩碼被用于設定文件的默認訪問權限,屏蔽掉某些權限,如一般用戶的寫權限。當另一個進程用exec調用我們編寫的daemon程序時,由于我們不知道那個進程的文件權限掩碼是什么,這樣在我們創建新文件時,就會帶來一些麻煩。所以,我們應該重新設置文件權限掩碼,我們可以設成任何我們想要的值,但一般情況下,大家都把它設為0,這樣,它就不會屏蔽用戶的任何操作。

如果你的應用程序根本就不涉及創建新文件或是文件訪問權限的設定,你也完全可以把文件權限掩碼一腳踢開,跳過這一步。

5、關閉所有不需要的文件。

同文件權限掩碼一樣,我們的新進程會從父進程那里繼承一些已經打開了的文件。這些被打開的文件可能永遠不被我們的daemon進程讀或寫,但它們一樣消耗系統資源,而且可能導致所在的文件系統無法卸下。需要指出的是,文件描述符為0、1和2的三個文件(文件描述符的概念將在下一章介紹),也就是我們常說的輸入、輸出和報錯這三個文件也需要被關閉。很可能不少讀者會對此感到奇怪,難道我們不需要輸入輸出嗎?但事實是,在上面的第2步后,我們的daemon進程已經與所屬的控制終端失去了聯系,我們從終端輸入的字符不可能達到daemon進程,daemon進程用常規的方法(如printf)輸出的字符也不可能在我們的終端上顯示出來。所以這三個文件已經失去了存在的價值,也應該被關閉。

使用PHP編寫Gearman的Worker守護進程

在我之前的文章中,介紹過Gearman的使用。在我的項目中,我使用了PHP來編寫一直運行的Worker。如果按照Gearman官方推薦的例子,只是簡單的一個循環來等待任務,會有一些問題,包括:1、當代碼進行過修改之后,如何讓代碼的修改生效;2、重啟Worker的時候,如何保證當前的任務處理完成才重啟。

針對這個問題,我考慮了以下的解決方法:

1、每次修改完代碼后,Worker需要手工重啟(先殺死然后啟動)。這個只能解決重新加載配置文件的問題。

2、在Worker中設置,單次任務循環完成后,就對Worker進行重啟。這個方案的問題在于消耗比較大。

3、在Worker中添加一個退出函數,如果需要Worker退出的時候,在Client端發送一個優先級比較高的退出調用。這個需要客戶端配合,在使用后臺類任務時,不太適合。

4、在Worker中檢查文件是否發生變化,如果發生了變化,退出并重啟自身。

5、為Worker編寫信號控制,接受重啟指令,類似于 http restart graceful 指令。

***,結合4和5兩種方法,可以實現這樣一個Daemon,如果配置文件發生了變化,他就會自動重啟;如果接受到了用戶的 kill -1 pid 信號,也會重新啟動。

代碼如下:

  1. <?php 
  2.  
  3. declare( ticks = 1 );  
  4. // This case will check the config file regularly, if the config file changed, it will restart it self  
  5. // If you want to restart the daemon gracefully, give it a HUP signal  
  6. // by shiqiang<cocowool@gmail.com> at 2011-12-04  
  7.  
  8. $init_md5 = md5_file( 'config.php');  
  9.  
  10. // register signal handler  
  11. pcntl_signal( SIGALRM, "signal_handler", true );  
  12. pcntl_signal( SIGHUP, 'signal_handler', TRUE );  
  13.  
  14. $job_flag = FALSE;    //Job status flag, to justify if the job has been finished  
  15. $signal_flag = FALSE;    //Signal status flag, to justify whether we received the kill -1 signal  
  16.  
  17. while( 1 ){  
  18.     $job_flag = FALSE;    //Job status flag  
  19.     print "Worker start running ... \n";  
  20.     sleep(5);  
  21.     print "Worker's task done ... \n";  
  22.     $flag = TRUE;    //Job status flag  
  23.     AutoStart( $signal_flag );  
  24. }  
  25.  
  26. function signal_handler( $signal ) {  
  27.     global $job_flag;  
  28.     global $signal_flag;  
  29.  
  30.     switch( $signal ){  
  31.         case SIGQUIT:  
  32.             print date('y-m-d H:i:s', time() ) . " Caught Signal : SIGQUIT - No : $signal \n";  
  33.             exit(0);  
  34.             break;  
  35.         case SIGSTOP:  
  36.             print date('y-m-d H:i:s', time() ) . " Caught Signal : SIGSTOP - No : $signal \n";  
  37.             break;  
  38.         case SIGHUP:  
  39.             print date('y-m-d H:i:s', time() ) . " Caught Signal : SIGHUP - No : $signal \n";  
  40.             if( $flag === TRUE ){  
  41.                 AutoStart( TRUE );  
  42.             }else{  
  43.                 $signal_flag = TRUE;  
  44.             }  
  45.             break;  
  46.         case SIGALRM:  
  47.             print date('y-m-d H:i:s', time() ) . " Caught Signal : SIGALRM - No : $signal \n";  
  48.             //pcntl_exec( '/bin/ls' );  
  49.             pcntl_alarm( 5 );  
  50.             break;  
  51.         default:  
  52.             break;  
  53.     }  
  54. }  
  55.  
  56. function AutoStart( $signal = FALSE, $filename = 'config.php' ){  
  57.     global $init_md5;  
  58.  
  59.     if( $signal || md5_file( $filename ) != $init_md5 ){  
  60.         print "The config file has been changed, we are going to restart. \n";  
  61.         $pid = pcntl_fork();  
  62.         if( $pid == -1 ){  
  63.             print "Fork error \n";  
  64.         }else if( $pid > 0 ){  
  65.             print "Parent exit \n";  
  66.             exit(0);  
  67.         }else{  
  68.             $init_md5 = md5_file( $filename );  
  69.             print "Child continue to run \n";  
  70.         }  
  71.     }  

原文:http://www.cnblogs.com/cocowool/archive/2011/12/04/2275497.html

【編輯推薦】

  1. PHP開發組首位中國成員及他的Yaf
  2. 大話PHP之性能
  3. 如果PHP是用英式英語編寫的
  4. PHP集成開發工具PHPStorm 3.0發布
  5. 手把手教你在Ubuntu上安裝Apache、MySql和PHP

 

責任編輯:陳貽新 來源: 小狼的世界
相關推薦

2015-08-10 14:42:40

Explain SheShell 命令

2009-11-18 13:52:30

PHP shell腳本

2021-05-17 15:08:27

PythonWindows背景編程語言

2020-06-16 08:44:23

Shell服務器

2019-05-20 16:21:51

LinuxShell監控磁盤

2009-03-23 13:08:07

PHP擴展PHPJavascript

2011-07-12 17:11:13

PHPSHELL

2016-03-28 10:00:09

Swift命令程序

2011-09-08 14:25:31

2012-11-29 14:44:07

2011-06-22 10:48:35

PHP

2011-11-30 21:56:31

ibmdwXPathPHP

2009-06-15 10:21:07

基于JBossMBean

2009-05-27 14:31:53

NetBeansEclipsPHP

2010-02-26 13:03:31

Python腳本語言

2018-09-19 08:50:45

PySimpleGUIGUIPython

2009-11-30 16:24:24

PHP腳本

2018-04-22 00:04:04

PHP C 代碼數據

2022-10-09 14:50:44

Python腳本

2011-08-30 16:31:23

UbuntuXdebug
點贊
收藏

51CTO技術棧公眾號

精品偷拍各种wc美女嘘嘘| 五月婷婷久久综合| 成人妇女淫片aaaa视频| 青草草在线视频| 久久免费视频66| 在线日韩av片| 国产精品久久久影院| 五月婷婷深深爱| 奇米精品一区二区三区四区 | 国产又爽又黄网站亚洲视频123| 亚洲一区亚洲| 久久午夜a级毛片| 男男做爰猛烈叫床爽爽小说| 久久福利在线| 精品久久香蕉国产线看观看gif| 视频一区视频二区视频三区视频四区国产 | 久久精品久久久精品美女| 欧美精品在线网站| 精品无码人妻一区二区免费蜜桃| 欧美日本三级| 91黄色激情网站| 亚洲色欲久久久综合网东京热| 九色在线免费| 成人激情免费网站| 成人福利在线视频| 日韩免费av网站| 亚洲精品影视| 精品少妇v888av| 潮喷失禁大喷水aⅴ无码| 秋霞蜜臀av久久电影网免费| 日韩视频一区二区三区| 男女视频在线看| 丁香花在线观看完整版电影| 亚洲日本青草视频在线怡红院| 欧洲一区二区日韩在线视频观看免费 | 国产视频二区在线观看| 国产a精品视频| 国产日韩在线免费| 中文字幕一区二区三区四区欧美| 极品尤物久久久av免费看| 久久夜精品va视频免费观看| 欧美激情 一区| 自拍偷拍精品| 国产丝袜一区视频在线观看| 日本人添下边视频免费| 亚洲精品在线播放| 欧美一区二区三区四区五区| 亚洲欧美自拍另类日韩| 免费福利视频一区二区三区| 粉嫩av一区二区三区免费野| 男女猛烈激情xx00免费视频| 丁香花在线影院| 亚洲一区在线观看免费观看电影高清| 99re99热| 97caopron在线视频| 亚洲日本在线看| 中文视频一区视频二区视频三区| 成全电影播放在线观看国语| 国产日韩精品久久久| 欧美日韩一区二区三| 男人的天堂在线| 久久久国产一区二区三区四区小说 | 亚洲精品视频在线播放| 日本黄色特级片| 性欧美xxxx免费岛国不卡电影| 日韩精品日韩在线观看| 亚洲区免费视频| 欧美综合一区| 日韩在线欧美在线国产在线| 肉色超薄丝袜脚交69xx图片 | 伊人青青综合网站| 日本女人性生活视频| 一区二区电影| 国内精品伊人久久| 欧美日韩乱国产| 丝瓜av网站精品一区二区| 国产精品久久久久不卡| 91丨九色丨蝌蚪丨对白| 国产馆精品极品| 国产一区不卡在线观看| 免费福利在线视频| 国产精品久久久久久久久免费樱桃| 一区二区在线观| 亚洲大胆人体大胆做受1| 亚洲国产一区在线观看| 日韩精品免费播放| 国产一区二区高清在线| 亚洲精品久久久久久久久| 亚洲码无人客一区二区三区| 日韩欧美电影| 欧美激情一区二区三区成人| 国产精品va无码一区二区三区| 免费av成人在线| 国产精品免费一区二区三区在线观看| 亚洲av电影一区| 国产视频一区在线播放| www.黄色网址.com| 伊伊综合在线| 日韩一级片网址| 37p粉嫩大胆色噜噜噜| 色婷婷色综合| 91国产一区在线| 国产又大又粗又长| 久久影院电视剧免费观看| 免费久久久久久| 一区二区精品伦理... | 久久久福利影院| 日韩欧美国产大片| 色偷偷av一区二区三区| 在线观看国产亚洲| 国产一区二区0| 免费中文日韩| 欧美色图天堂| 欧美日韩1区2区| 3d动漫精品啪啪一区二区下载| 中出一区二区| 国产精品久久久久久久美男| 懂色av蜜臀av粉嫩av分享吧| 亚洲欧洲日本在线| 不卡影院一区二区| 精品视频自拍| 欧美激情网站在线观看| 一区二区三区免费在线视频| 久久亚洲欧美国产精品乐播 | 4438成人网| 免费看黄色的视频| 99亚洲一区二区| 99视频网站| 国产黄色在线网站| 欧美日韩精品欧美日韩精品一| 蜜桃精品成人影片| 亚洲激情网站| 99久久精品无码一区二区毛片| 在线国产91| 日本韩国精品一区二区在线观看| 大乳护士喂奶hd| 国产精品v亚洲精品v日韩精品| 91精品国产综合久久香蕉| 成人午夜在线观看视频| 色偷偷成人一区二区三区91 | 日日碰狠狠丁香久燥| 麻豆成人入口| 国内免费久久久久久久久久久 | 欧美日韩女优| 亚洲视频综合网| 天天干,天天干| 久久嫩草精品久久久精品| 麻豆tv在线播放| 成人在线视频你懂的| 欧美精品videosex性欧美| 精品久久国产视频| 一区2区3区在线看| 秋霞午夜鲁丝一区二区| 欧美成人日本| 国产麻豆日韩| 欧产日产国产精品视频| 亚洲精品久久久久久久久久久久久| 国产精彩视频在线观看| a级高清视频欧美日韩| 国产一二三在线视频| 欧美色资源站| 国产999在线观看| 懂色av中文在线| 欧美日韩国产一区二区三区地区| 污污视频网站在线免费观看| 激情久久五月天| 久久av高潮av| 麻豆精品av| 国产精品高清网站| 麻豆传媒在线观看| 精品国产一区二区精华| 成人在线免费看视频| 国产偷国产偷精品高清尤物| 亚洲美女性囗交| 欧美日韩精品| 久久综合伊人77777麻豆| 欧美成人a交片免费看| 日韩亚洲欧美成人| 亚洲高清精品视频| 红桃视频成人在线观看| 亚洲精品91在线| 国产精品亚洲午夜一区二区三区| 精品视频在线观看一区| 日本欧美视频| 91探花福利精品国产自产在线| 久草在线视频网站| 亚洲无亚洲人成网站77777| 国产精品女人久久久| 亚洲在线观看免费| 成人影视免费观看| 国产一区在线看| 青青在线视频观看| 亚洲综合婷婷| 欧美精品一区二区三区在线四季| 一级欧美视频| 啪一啪鲁一鲁2019在线视频| 黄色动漫在线| 精品爽片免费看久久| 国产美女自慰在线观看| 粉嫩av一区二区三区免费野| 国产精品99久久久久久成人| 91美女片黄在线观看| 第一区免费在线观看| 99热免费精品在线观看| 一区二区不卡在线| 色婷婷久久久| 成人一区二区在线| 精品久久毛片| 青青久久av北条麻妃海外网| 羞羞网站在线免费观看| 中文字幕日韩av综合精品| 国产 欧美 自拍| 欧美人动与zoxxxx乱| 亚洲永久精品在线观看| 亚洲黄色免费电影| 日本午夜精品视频| 久久综合久久久久88| 佐佐木明希电影| 狠狠狠色丁香婷婷综合激情| 东京热加勒比无码少妇| 激情丁香综合| 亚洲区成人777777精品| 不卡在线一区二区| 欧美日韩国产不卡在线看| xvideos.蜜桃一区二区| 成人免费福利在线| 日韩精品第一| 欧美中文字幕在线| av电影在线免费| 欧美激情视频播放| 成人免费在线| 最新国产精品拍自在线播放| 女人天堂在线| 精品在线欧美视频| 天天干视频在线观看| 日韩欧美第一区| 国产理论视频在线观看| 欧美日韩亚洲国产综合| 最近免费中文字幕大全免费版视频| 亚洲国产精品久久久男人的天堂| 四虎影院中文字幕| 自拍偷拍亚洲欧美日韩| 波多野结衣喷潮| 国产精品入口麻豆九色| 人妻一区二区视频| 国产清纯美女被跳蛋高潮一区二区久久w | 福利写真视频网站在线| 欧美国产日韩二区| 牛牛电影国产一区二区| 欧美大片免费看| 男女羞羞视频在线观看| 欧美精品久久一区二区 | 亚洲精品伦理在线| 麻豆成人在线视频| 亚洲国产精品一区二区www在线| 久久久久久久九九九九| 亚洲小说欧美激情另类| 好吊操这里只有精品| 午夜视频在线观看一区| 久久久久久久黄色片| 色综合久久久久| 免费看av在线| 欧美一级二级三级蜜桃| 后入内射欧美99二区视频| 日韩激情在线视频| 成人不用播放器| 日韩视频精品在线| 色呦呦网站在线观看| 午夜精品三级视频福利| 婷婷综合六月| 成人免费自拍视频| 国产精品99久久免费观看| 欧美成人dvd在线视频| 日韩精品中文字幕第1页| 9l视频自拍9l视频自拍| 亚洲国产清纯| 一区二区三区入口| 国产91在线|亚洲| 新91视频在线观看| 亚洲三级小视频| 91久久国产视频| 欧美日韩在线直播| 亚洲精品人妻无码| 亚洲图片欧美日产| av免费看在线| 日本精品视频在线观看| 亚洲ww精品| 精品视频在线观看| 99精品视频在线观看播放| 91动漫在线看| 奇米精品一区二区三区在线观看| 日日夜夜精品视频免费观看| 99久久精品一区二区| 日本激情视频一区二区三区| 亚洲成av人片观看| 夜夜躁很很躁日日躁麻豆| 亚洲精品一区二区三区影院| 大胆av不用播放器在线播放| 欧美精品激情在线观看| jizz免费一区二区三区| 99在线视频首页| 精品国产精品久久一区免费式| 久久人妻无码一区二区| 久久婷婷激情| 在线观看免费视频国产| 国产精品久久久久一区二区三区共| 国产精品16p| 欧美精品日韩综合在线| 亚洲日本在线播放| 欧美成人精品激情在线观看| 欧洲一级精品| 久久国产精品99久久久久久丝袜| 午夜精品久久久久久久四虎美女版| 成人综合视频在线| 国产成人自拍高清视频在线免费播放| 人妻视频一区二区| 精品人伦一区二区三区蜜桃网站| 国产人妖一区二区| 综合136福利视频在线| 小h片在线观看| 99精品在线直播| 亚洲影视一区二区三区| 免费看污污网站| 91麻豆免费观看| 福利一区二区三区四区| 日韩一区二区电影| caopen在线视频| 国产日韩欧美影视| 成人情趣视频| 国产三级日本三级在线播放| 91在线视频观看| 九九热国产视频| 欧美va在线播放| av网站导航在线观看免费| 国产精品欧美亚洲777777| 亚洲深夜福利在线观看| 亚洲国产精品久久久久爰色欲| www.日韩精品| 日操夜操天天操| 亚洲国产免费av| 2021天堂中文幕一二区在线观| 99精品国产高清一区二区| 欧美视频久久| 午夜福利三级理论电影| 亚洲综合色在线| 亚洲国产999| 欧美激情第99页| 加勒比色老久久爱综合网| 欧日韩免费视频| 成人动漫视频在线| 在线观看亚洲天堂| 精品网站999www| 久久久成人av毛片免费观看| 欧洲精品码一区二区三区免费看| 日日夜夜一区二区| av永久免费观看| 欧美日韩久久不卡| 国产淫片在线观看| 国产精品swag| 国产亚洲永久域名| 国产熟女一区二区| 欧美久久久影院| 欧洲成人综合网| 久久亚洲免费| 日本欧美韩国一区三区| 女同久久另类69精品国产| 欧美精品三级日韩久久| 欧美xxxx性xxxxx高清| 国外成人免费视频| 裸体一区二区| 青花影视在线观看免费高清| 精品少妇一区二区| 欧美成人影院| 性做爰过程免费播放| 成人综合婷婷国产精品久久蜜臀| 999这里只有精品| 中文字幕欧美日韩在线| 亚洲不卡视频| 国产乱子夫妻xx黑人xyx真爽| 中文字幕久久午夜不卡| 国产欧美日韩综合精品一区二区三区| 久久久久久久久久久免费精品| 亚洲精品小区久久久久久| 九九热精品在线播放| 亚洲国产一区二区三区| 免费福利在线观看| 亚洲www视频| 亚洲尤物影院| 免费在线观看h片| 亚洲国产欧美日韩精品| 欧美日韩女优| 无码av天堂一区二区三区| 欧美激情在线观看视频免费| 午夜精品小视频| 国产精品久久久久久久久久新婚| 欧美日韩成人| 色综合99久久久无码国产精品| 日韩一区二区在线看| 日韩制服诱惑| 成年人网站免费视频|