成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

寫給 PHP 程序員的信號處理教程

新聞 前端
信號相關的知識點其實有很多,還需要繼續深入研究~上文中的PHP源碼為7.1.25版本,各個版本可能不太一樣。

“ 今天晚上吃鹵煮,領桌的妹子問我,這玩意兒能吃么?我:你覺得能吃就能吃。。。和內容無關的主題 

01

什么是信號

信號就是事件發生時,對進程的一種通知機制(也叫軟件中斷)。當一個進程收到信號后,內核會暫停該進程正在執行的代碼,并跳轉到對應的信號處理函數中,如果處理函數不中斷,執行完處理函數后,會繼續執行之前中斷的地方往下執行。

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

02

C的信號處理舉例

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

03

PHP的信號處理舉例

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

04

PHP的信號處理并不是直接調用C

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

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

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

05

PHP如何優雅的處理信號

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

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

信號相關的知識點其實有很多,還需要繼續深入研究~上文中的PHP源碼為7.1.25版本,各個版本可能不太一樣,如果覺得學到了點啥,順手點個好看

責任編輯:張燕妮 來源: 假裝是個程序員
相關推薦

2022-08-08 15:45:44

JavaPromise前端

2022-08-08 10:45:49

PromiseJava腳手架

2010-12-30 10:04:49

Linux入門

2016-01-05 10:30:59

后端程序員緩存原理

2012-11-23 13:14:52

2015-08-14 13:51:22

程序員

2014-10-17 18:31:05

PHP

2015-07-13 11:32:09

PHP程序員正確姿勢

2015-08-03 09:33:21

PH程序員一生

2016-12-19 16:55:10

PHP程序員運維

2017-03-02 09:37:36

PHP程序員成長規劃

2009-03-20 10:06:21

程序員PHP職場

2015-06-11 13:12:56

2020-07-13 08:08:05

程序員軟考原理

2013-08-20 09:33:59

程序員

2009-11-19 10:21:02

2009-01-08 09:04:18

2011-07-07 14:47:15

PHP

2015-09-16 09:57:41

swoolePHP程序員

2014-08-13 10:38:01

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久免费视频在线 | 久久精品欧美一区二区三区不卡 | 一区二区三区亚洲视频 | 日日噜噜夜夜爽爽狠狠 | 免费看黄视频网站 | www.中文字幕.com | 91精品国产综合久久精品 | 亚洲精品免费在线 | 国产精产国品一二三产区视频 | 国产精品久久久乱弄 | 国产二区av | 亚洲精品久久久一区二区三区 | www.99热.com| 中文字幕成人av | 一区二区三区免费 | 精品视频一区二区三区 | 五月天婷婷综合 | 一级片网址 | 国产视频二区 | 天堂视频一区 | 欧美一区二区三区在线视频 | 欧美精品一区二区在线观看 | 欧美日韩国产综合在线 | 国产精品久久片 | 欧美性一区二区三区 | 黄网站在线播放 | 日韩精品二区 | 国产日韩欧美精品一区二区三区 | 亚洲不卡视频 | 91视在线国内在线播放酒店 | 第四色狠狠 | av黄色网 | 国产九九精品 | www亚洲精品| 宅男噜噜噜66一区二区 | 粉嫩一区二区三区国产精品 | 国产精品久久久久久久久免费丝袜 | 91久久久久久久久久久 | 日韩国产一区二区三区 | 中文字幕一区在线观看视频 | 在线婷婷 |