摘要:則發(fā)現(xiàn)程序并不會(huì)完整輸出行數(shù)據(jù),只是部分?jǐn)?shù)據(jù)。如不關(guān)閉,將會(huì)浪費(fèi)系統(tǒng)資源,這倒是小事,造成進(jìn)程所在的文件系統(tǒng)無(wú)法卸下以及引起無(wú)法預(yù)料的錯(cuò)誤。所以需要關(guān)閉這些關(guān)閉標(biāo)準(zhǔn)輸入輸出與錯(cuò)誤顯示。
總結(jié)一下先~
一個(gè)守護(hù)進(jìn)程一般需要root權(quán)限,因?yàn)榭赡芤褂锰厥舛丝?-1024及其他權(quán)限
一個(gè)守護(hù)進(jìn)程的父進(jìn)程會(huì)被fork之后被殺掉,所以可以說(shuō)他的父進(jìn)程是init進(jìn)程。
一個(gè)守護(hù)進(jìn)程無(wú)需交互,也和終端(teriminalsession)無(wú)關(guān),所以任何輸出,無(wú)論是向標(biāo)準(zhǔn)輸出還是錯(cuò)誤輸出,都需要特殊處理,涉及到的就是stdout和stderr
上代碼下面是我用php 編寫(xiě)一個(gè)守護(hù)進(jìn)程 demo
好下面我們執(zhí)行操作,輸出如下
root@tb:/home/tb/linuxing# php php_daemon.php fork succ loop0 root@tb:/home/tb/linuxing# loop1 loop2 loop3 loop4 ... loop20查看demo.txt
cat demo.txt 0--2016-07-15 17:49:47 1--2016-07-15 17:49:48 2--2016-07-15 17:49:49 ...問(wèn)題來(lái)了貌似沒(méi)有問(wèn)題,但是用以上php代碼,執(zhí)行后,馬上關(guān)閉當(dāng)前終端。則發(fā)現(xiàn)程序并不會(huì)完整輸出20行數(shù)據(jù),只是部分?jǐn)?shù)據(jù)。
問(wèn)題復(fù)現(xiàn)步驟:
1.ubuntu終端Azhong 執(zhí)行 php php_daemon.php
2.關(guān)閉終端A
3.打開(kāi)新終端B,ps -aux |grep php 發(fā)現(xiàn)無(wú)此進(jìn)程如果手慢,自己把握時(shí)間或者調(diào)整for 次數(shù)。。
為什么呢進(jìn)程從創(chuàng)建它的父進(jìn)程那里繼承了打開(kāi)的文件描述符。如不關(guān)閉,將會(huì)浪費(fèi)系統(tǒng)資源,(這倒是小事),造成進(jìn)程所在的文件系統(tǒng)無(wú)法卸下以及引起無(wú)法預(yù)料的錯(cuò)誤。
所以需要關(guān)閉這些fclose(STDIN),fclose(STDOUT),fclose(STDERR)關(guān)閉標(biāo)準(zhǔn)輸入輸出與錯(cuò)誤顯示。
正確代碼之一再解釋一下如果想在關(guān)閉當(dāng)前終端后繼續(xù)執(zhí)行
需要關(guān)閉echo 那一行,因?yàn)楫?dāng)然echo 和當(dāng)然session關(guān)聯(lián),sesssion關(guān)閉后,echo就會(huì)導(dǎo)致php致命錯(cuò)誤,所以下面的file_put_contents不會(huì)執(zhí)行。所以為了避免除顯示輸出的echo導(dǎo)致php錯(cuò)誤的問(wèn)題,我們一般建議這樣
global $STDOUT, $STDERR; fclose(STDOUT); fclose(STDERR); $STDOUT = fopen("/dev/null", "rw+"); $STDERR = fopen("/dev/null", "rw+");加上上面那句,所有的顯示的不顯示的echo err之類都可以被忽略。也就是說(shuō)你把
更優(yōu)處理辦法
echo "loop" . $i . "n";這句加上也沒(méi)有問(wèn)題
指到dev/null,,如果你不這樣,你的stdout會(huì)跟你的session有關(guān)。。
你的session一關(guān),你的stdout就失效,,echo就報(bào)錯(cuò)了。感謝三金 CFC4N
守護(hù)進(jìn)程詳解及創(chuàng)建,daemon()使用
不懂的太多當(dāng)然這只是個(gè)例子,實(shí)際中還需要考慮目錄權(quán)限,umask,figchld信號(hào)。這些我還沒(méi)接觸。。。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/21776.html
摘要:因?yàn)樽舆M(jìn)程一定不會(huì)是組長(zhǎng)進(jìn)程,所以子進(jìn)程可以調(diào)用。主進(jìn)程退出子進(jìn)程繼續(xù)執(zhí)行啦啦啦,啦啦啦,啦啦啦,已經(jīng)變成啦,開(kāi)心一般服務(wù)器軟件都有寫(xiě)配置項(xiàng),比如以模式運(yùn)行還是以模式運(yùn)行。 [原文地址:https://blog.ti-node.com/blog...] 其實(shí)前面是談過(guò)一次daemon進(jìn)程的,但是并涉及過(guò)多原理,但是并不影響使用。今天打算說(shuō)說(shuō)關(guān)于daemon進(jìn)程更多的二三事,本質(zhì)上說(shuō),如...
摘要:守護(hù)進(jìn)程為什么需要守護(hù)進(jìn)程呢普通進(jìn)程在運(yùn)行時(shí)可以被控制終端發(fā)出的信號(hào)打斷而守護(hù)進(jìn)程由于脫離了控制終端所以不會(huì)被其打斷守護(hù)進(jìn)程創(chuàng)建的標(biāo)準(zhǔn)流程調(diào)用設(shè)置文件創(chuàng)建的掩碼子進(jìn)程并關(guān)閉父進(jìn)程調(diào)用創(chuàng)建新會(huì)話把當(dāng)前工作目錄切換為根目錄不需要的文件描述符全部 守護(hù)進(jìn)程 為什么需要守護(hù)進(jìn)程呢? 普通進(jìn)程在運(yùn)行時(shí)可以被控制終端發(fā)出的信號(hào)打斷, 而守護(hù)進(jìn)程由于脫離了控制終端, 所以不會(huì)被其打斷. 守護(hù)進(jìn)程創(chuàng)建...
摘要:本節(jié)主要講解常用函數(shù)和進(jìn)程池的概念,也會(huì)涉及到守護(hù)進(jìn)程的知識(shí)。所以任何時(shí)候,建議預(yù)先創(chuàng)建好進(jìn)程,也就是使用進(jìn)程池的方式實(shí)現(xiàn)。 本節(jié)主要講解Posix常用函數(shù)和進(jìn)程池的概念,也會(huì)涉及到守護(hù)進(jìn)程的知識(shí)。本節(jié)難度較低。 Posix常用函數(shù) posix_kill 向指定pid進(jìn)程發(fā)送信號(hào)。成功時(shí)返回 TRUE , 或者在失敗時(shí)返回 FALSE 。 bool posix_kill ( int $...
摘要:后面每開(kāi)啟一個(gè)子進(jìn)程,會(huì)將子進(jìn)程的存儲(chǔ)到中,用來(lái)后面主進(jìn)程監(jiān)控子進(jìn)程,如果子進(jìn)程意外終止,主進(jìn)程可以重新佛。將當(dāng)前子進(jìn)程設(shè)置為會(huì)話組再次創(chuàng)建子進(jìn)程,為了防止在的系統(tǒng)下重新打開(kāi)控制終端。 wokerman 啟動(dòng)分析 @(學(xué)習(xí))[workerman, php] 前期想說(shuō)的 也是最近才看的代碼,遇到不懂得地方就去google,所以這篇文章里面穿插了很多參考資料,可以直接點(diǎn)擊閱覽。 需要了解一...
摘要:守護(hù)進(jìn)程常常在系統(tǒng)引導(dǎo)裝入時(shí)啟動(dòng),在系統(tǒng)關(guān)閉時(shí)終止。進(jìn)程組有進(jìn)程組來(lái)唯一標(biāo)識(shí)。且該進(jìn)程組不會(huì)因組長(zhǎng)進(jìn)程的退出而受到影響。 使用函數(shù) pcntl_fork();//創(chuàng)建子進(jìn)程 posix_setsid();//設(shè)置當(dāng)前進(jìn)程為進(jìn)程組長(zhǎng) posix_getpid();//獲取進(jìn)程id 例子 workerman中將進(jìn)程 /** * Run as deamon mode. * * @th...
閱讀 1392·2021-10-11 10:57
閱讀 2121·2021-09-02 15:15
閱讀 1713·2019-08-30 15:56
閱讀 1264·2019-08-30 15:55
閱讀 1217·2019-08-30 15:44
閱讀 1038·2019-08-29 12:20
閱讀 1415·2019-08-29 11:12
閱讀 1131·2019-08-28 18:29