真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP程序員的信號處理案例-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)PHP程序員的信號處理案例的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)龍沙免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

什么是信號

信號就是事件發(fā)生時,對進(jìn)程的一種通知機(jī)制(也叫軟件中斷)。當(dāng)一個進(jìn)程收到信號后,內(nèi)核會暫停該進(jìn)程正在執(zhí)行的代碼,并跳轉(zhuǎn)到對應(yīng)的信號處理函數(shù)中,如果處理函數(shù)不中斷,執(zhí)行完處理函數(shù)后,會繼續(xù)執(zhí)行之前中斷的地方往下執(zhí)行。

我們在FPM模式下寫代碼,不會遇到信號處理相關(guān)的問題,但是CLI模式下一些常駐內(nèi)存的腳本,如何能夠自由的重啟、關(guān)閉、退出前做一些清理工作(斷開鏈接,刪除臨時文件等)?

C的信號處理舉例

PHP程序員的信號處理案例

上圖中,我為信號SIGINT注冊了處理函數(shù)sigint_handle,捕獲到信號后,輸出內(nèi)容后退出,簡單易懂吧。執(zhí)行gcc -o run run.c && ./run ,然后CTRL+C(會觸發(fā)SIGINT信號),成功輸出:成功捕獲到信號2!,程序直接結(jié)束運行。

PHP的信號處理舉例

PHP程序員的信號處理案例

pcntl_signal是PHP的信號處理注冊方法,上面實現(xiàn)的功能和C實現(xiàn)的基本一致,不同的是,當(dāng)前進(jìn)程不會退出,并且多輸出了一個signinfo(PHP是C寫的,為啥剛剛C語言的沒有信號相關(guān)的信息呢?因為PHP使用的是另一個信號函數(shù)sigaction,有興趣的可以了解一下)

PHP的信號處理并不是直接調(diào)用C

PHP程序員的信號處理案例

這個是pcntl初始化的時候,將pcntl_signal_dispatch注冊為tick的處理函數(shù)

PHP程序員的信號處理案例

pcntl_signal會將處理函數(shù)放到信號集合中(PHP的hash table),而php_signale4最終會調(diào)用sigaction進(jìn)行底層的信號管理。

PHP程序員的信號處理案例

這里我省略了大量代碼,將關(guān)鍵的點標(biāo)記了出來,其實PHP維護(hù)一個自己的信號集合,每當(dāng)調(diào)用pcntl_signal_dispatch時就會查詢是否有信號,上面的SIG_BLOCK會將信號阻塞,這樣只有我們把關(guān)鍵的代碼執(zhí)行完畢之后,再去觸發(fā)信號處理函數(shù)以保證數(shù)據(jù)和程序邏輯的完整性。

PHP如何優(yōu)雅的處理信號

經(jīng)常見到身邊的程序員們,每當(dāng)需要重啟PHP-FPM進(jìn)程的時候,使用的招數(shù)是kill掉所有PHP進(jìn)程,然后新啟動。一般情況沒啥問題,但有些時候可能某個進(jìn)程的任務(wù)還沒執(zhí)行完,直接把人家中斷了略顯粗暴。其實只要你給PHP的Master進(jìn)程發(fā)送一條USR2信號,它便會再處理完所有任務(wù)后,重啟子進(jìn)程,這才是所謂的優(yōu)雅~

PHP程序員的信號處理案例

上圖是我簡單寫的一個例子,如果我們想讓進(jìn)程優(yōu)雅退出的時候,只需要發(fā)送SIGTERM信號即可。需要注意的是SIGKILLSIGSTOP信號會略過信號阻塞會將進(jìn)程直接停止,還有就是信號會中斷睡眠(SLEEP),sleep如果沒執(zhí)行完會返回剩下的秒數(shù),有興趣可以試試。

信號相關(guān)的知識點其實有很多,還需要繼續(xù)深入研究~上文中的PHP源碼為7.1.25版本,各個版本可能不太一樣。

感謝各位的閱讀!關(guān)于“PHP程序員的信號處理案例”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


本文標(biāo)題:PHP程序員的信號處理案例-創(chuàng)新互聯(lián)
鏈接URL:http://weahome.cn/article/dihgdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部