摘要:什么是守護進程守護進程是一種特殊的進程,它的生命周期很長,它在后臺運行并且沒有控制終端這樣可以保證守護進程不會接收到各種來自終端的信號。比如等,都會使用守護進程的形式運行,確??梢砸恢闭5奶峁┓?。
什么是守護進程
守護進程(daemon)是一種特殊的進程,它的生命周期很長,它在后臺運行并且沒有控制終端(這樣可以保證守護進程不會接收到各種來自終端的信號)。
比如:crontab、sshd、nginx等,都會使用守護進程的形式運行,確??梢砸恢闭5奶峁┓铡?/p>
如何實現(xiàn)守護進程
fork子進程,父進程退出(當前子進程會成為init進程的子進程)
子進程調(diào)用setsid(),開啟一個新會話,成為新的會話組長,并且釋放于終端的關聯(lián)關系
再次fork子進程,父進程退出(可以防止會話組長重新申請打開終端)
關閉打開的文件描述符
改變當前工作目錄chdir
清除進程的umask
PHP實現(xiàn)/** * daemon(守護進程) PHP實現(xiàn) * @author zhjx922 */ $pid = pcntl_fork(); if ($pid == -1) { die("創(chuàng)建子進程失敗"); } else if ($pid) { //第一次退出父進程 exit(0); } //setsid posix_setsid(); echo "成功輸出,脫離終端" . PHP_EOL; sleep(5); $pid = pcntl_fork(); if ($pid == -1) { die("創(chuàng)建子進程失敗"); } else if ($pid) { //第二次退出父進程(之前fork出來的子進程) exit(0); } echo "依然可以輸出" . PHP_EOL; sleep(5); //關閉各種描述符 @fclose(STDOUT); @fclose(STDERR); $STDOUT = fopen("/dev/null", "a"); $STDERR = fopen("/dev/null", "a"); chdir("/"); umask(0); echo "這里不會輸出, ps aux | grep daemon.php 查看進程,20s后退出" . PHP_EOL; sleep(20);日常使用已經(jīng)注意事項
php daemon.php & 這樣使用,當關閉終端后,當前php進程也會同時關掉
nohup php daemon.php > daemon.log & 終端關閉后,依然會繼續(xù)運行
使用supervisor
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/22634.html
摘要:代碼實現(xiàn)啟動啟動流程見流程,主要包括守護進程保存注冊信號處理器創(chuàng)建多進程這部分。模擬調(diào)度實際用實現(xiàn)捕獲信號其中,會在每次調(diào)度過程中,捕獲信號并執(zhí)行注冊的信號處理器。 首發(fā)于 樊浩柏科學院 經(jīng)過 用 PHP 玩轉(zhuǎn)進程之一 — 基礎 的回顧復習,我們已經(jīng)掌握了進程的基礎知識,現(xiàn)在可以嘗試用 PHP 做一些簡單的進程控制和管理,來加深我們對進程的理解。接下來,我將用多進程模型實現(xiàn)一個簡單的...
摘要:做了一次分享,主題使用搭建開發(fā)環(huán)境,簡單介紹了一下的概念,演示了使用構(gòu)建全套環(huán)境。應場景通常于如下場景應的動化打包和發(fā)布動化測試和持續(xù)集成發(fā)布在服務型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺應從頭編譯或者擴展現(xiàn)有的或平臺來搭建的環(huán)境。 做了一次分享,主題《使用 Docker 搭建開發(fā)環(huán)境》,簡單介紹了一下 Docker 的概念,演示了使用 Docker-compose 構(gòu)建全套 PHP 環(huán)境...
摘要:做了一次分享,主題使用搭建開發(fā)環(huán)境,簡單介紹了一下的概念,演示了使用構(gòu)建全套環(huán)境。應場景通常于如下場景應的動化打包和發(fā)布動化測試和持續(xù)集成發(fā)布在服務型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺應從頭編譯或者擴展現(xiàn)有的或平臺來搭建的環(huán)境。 做了一次分享,主題《使用 Docker 搭建開發(fā)環(huán)境》,簡單介紹了一下 Docker 的概念,演示了使用 Docker-compose 構(gòu)建全套 PHP 環(huán)境...
摘要:調(diào)用此函數(shù),就可使當前進程脫離終端變成一個守護進程,具體內(nèi)容參見。命令行程序?qū)崿F(xiàn)守護進程化有種方法一使用這里就實現(xiàn)了守護進程化。單獨執(zhí)行,當按下時就會中斷程序執(zhí)行,會當前進程以及子進程。 一般Server程序都是運行在系統(tǒng)后臺,這與普通的交互式命令行程序有很大的區(qū)別。glibc里有一個函數(shù)daemon。調(diào)用此函數(shù),就可使當前進程脫離終端變成一個守護進程,具體內(nèi)容參見man daemon...
摘要:多進程中與多進程相關的兩個重要拓展是和。函數(shù)執(zhí)行期間,主進程除了等待無法處理其他任務,所以一般不認為這是多進程編程。回收子進程有兩種方式,一種是主進程調(diào)用函數(shù)等待子進程結(jié)束另外一種是處理信號。 轉(zhuǎn)載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎 web請求 cookie web響應 session 數(shù)據(jù)庫操作 加解...
閱讀 2929·2021-11-22 15:22
閱讀 20178·2021-09-22 15:00
閱讀 1533·2021-09-07 09:58
閱讀 1299·2019-08-30 13:01
閱讀 2512·2019-08-29 16:27
閱讀 2404·2019-08-26 13:25
閱讀 1684·2019-08-26 12:13
閱讀 1013·2019-08-26 11:53