PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)公司是專業(yè)的萊陽網(wǎng)站建設(shè)公司,萊陽接單;提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行萊陽網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)
中斷系統(tǒng)跟PHP沒有關(guān)系啊,不過PHP官方的pcntl擴(kuò)展支持了,一般把正在執(zhí)行的程序稱為主程序,當(dāng)中斷源【比如鍵盤按下ctrl+c,ctrl+z等產(chǎn)生的硬件中斷事件】發(fā)起一個(gè)中斷請(qǐng)求事件【中斷信號(hào)】,主程序會(huì)接受這個(gè)中斷請(qǐng)求并停止當(dāng)前正在運(yùn)行的程序,然后轉(zhuǎn)到中斷服務(wù)程序去運(yùn)行【中斷響應(yīng)】,中斷服務(wù)程序也稱為中斷處理程序,程序打斷的地方稱為斷點(diǎn),中斷服務(wù)程序處理完成后返回?cái)帱c(diǎn)處繼續(xù)執(zhí)行,稱為中斷返回。

PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)

以上就是一個(gè)完整的中斷處理過程。

中斷源
硬件產(chǎn)生的中斷:鍵盤【大部分人只能接觸這些啦,如ctrl_c,ctrl+z產(chǎn)生的中斷SIGINT,SIGTSTP等】
軟件產(chǎn)生的中斷:某個(gè)進(jìn)程的子進(jìn)程退出產(chǎn)生中斷,定時(shí)信號(hào),或是通過kill發(fā)出的中斷或是在一個(gè)進(jìn)程向另一個(gè)進(jìn)程發(fā)出的中斷,文件描述符變化產(chǎn)生中斷等。

中斷信號(hào):
PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)
信號(hào)列表說明

PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)
PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)
PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)

中斷處理:
1、執(zhí)行默認(rèn)動(dòng)作
2、忽略
3、執(zhí)行用戶自定義的信號(hào)處理函數(shù) 【捕獲】

中斷信號(hào)的處理例子【PHP手冊(cè)】

echo "安裝信號(hào)處理器...\n";
pcntl_signal(SIGHUP,  function($signo) {//中斷處理程序
    echo "信號(hào)處理器被調(diào)用\n";
});

echo "為自己生成SIGHUP信號(hào)...\n";
posix_kill(posix_getpid(), SIGHUP);//產(chǎn)生中斷請(qǐng)求

echo "分發(fā)...\n";
pcntl_signal_dispatch();

echo "完成\n";

PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)

信號(hào)集和阻塞:
1、信號(hào)遞達(dá)時(shí)處理的動(dòng)作
2、信號(hào)未決集
3、信號(hào)阻塞集

進(jìn)程可以選擇阻塞某個(gè)信號(hào),阻塞的信號(hào),當(dāng)產(chǎn)生時(shí)將會(huì)放在未解決集,除非已經(jīng)解除阻塞,才能捕獲到。
信號(hào)集操作
1、初始化一個(gè)信號(hào)集 【sigemptyset】
2、添加/刪除信號(hào) 【sigaddset,sigdelset】
3、判斷某個(gè)信號(hào)是否屬于某個(gè)集合里 【sigismember】
4、信號(hào)集阻塞函數(shù) sigprocmask 【pcntl_sigprocmask】
5、未決信號(hào)集sigpending
6、信號(hào)處理函數(shù)signal,sigaction【pcntl_signal】

信號(hào)阻塞測(cè)試:【信號(hào)無法遞達(dá),只能在未決集合里,可以查看/proc/PID/status對(duì)信號(hào)的處理】
PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)

檢測(cè)一個(gè)進(jìn)程是否存在【向進(jìn)程組發(fā)送信號(hào)】
posix_kill(posix_getpid(), 0);

信號(hào)【軟中斷】的局限性:
1、信號(hào)的系統(tǒng)開銷太大。
2、發(fā)送信號(hào)的進(jìn)程要進(jìn)行系統(tǒng)調(diào)用。
3、內(nèi)核要中斷接受信號(hào)的進(jìn)程,而且要管理它的堆棧,同時(shí)還要調(diào)用處理程序,后之還要恢復(fù)被執(zhí)行的中斷的進(jìn)程。
4、信號(hào)的數(shù)量非常有限【linux支持64個(gè)】
5、信號(hào)能傳輸?shù)男畔⒘糠浅S邢蓿脩舢a(chǎn)生的信號(hào)不能附加各種信息及參數(shù)。

上述就是小編為大家分享的PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:PHP中怎么實(shí)現(xiàn)一個(gè)信號(hào)中斷系統(tǒng)
URL網(wǎng)址:http://muchs.cn/article36/gedopg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站全網(wǎng)營銷推廣、云服務(wù)器、網(wǎng)站排名、軟件開發(fā)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)