溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP中怎么實現(xiàn)一個信號中斷系統(tǒng)

發(fā)布時間:2021-06-29 16:52:49 來源:億速云 閱讀:177 作者:Leah 欄目:大數(shù)據(jù)

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

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

PHP中怎么實現(xiàn)一個信號中斷系統(tǒng)

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

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

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

PHP中怎么實現(xiàn)一個信號中斷系統(tǒng)
PHP中怎么實現(xiàn)一個信號中斷系統(tǒng)
PHP中怎么實現(xiàn)一個信號中斷系統(tǒng)

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

中斷信號的處理例子【PHP手冊】

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

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

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

echo "完成\n";

PHP中怎么實現(xiàn)一個信號中斷系統(tǒng)

信號集和阻塞:
1、信號遞達(dá)時處理的動作
2、信號未決集
3、信號阻塞集

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

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

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

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

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI