电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

php 中的信號處理操作實例詳解

瀏覽:100日期:2022-09-11 10:49:30

本文實例講述了php 中的信號處理操作。分享給大家供大家參考,具體如下:

首先我們需要了解幾個函數

pcntl_signal 安裝信號處理器,也就是當指定信號發生時,調用函數。pcntl_alarm 指定秒數后向進程發送SIGALRM信號。posix_getpid 返回當前進程idposix_kill 給指定進程發送信號

一些常用的信號說明

SIGHUP本信號在用戶終端連接(正常或非正常)結束時發出, 通常是在終端的控制進程結束時,通知同一session內的各個作業, 這時它們與控制終端不再關聯。

SIGINT程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時發出。

SIGQUIT和SIGINT類似,但由QUIT字符(通常是Ctrl-/)來控制;進程在因收到SIGQUIT退出時會產生core文件,在這個意義上類似于一個程序錯誤信號。

SIGKILL用來立即結束程序的運行。本信號不能被阻塞、處理和忽略。如果管理員發現某個進程終止不了,可嘗試發送這個信號。

SIGTERM程序結束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程序自己正常退出,shell命令kill缺省產生這個信號。如果進程終止不了,我們才會嘗試SIGKILL。

SIGUSR1留給用戶使用

SIGUSR2留給用戶使用

SIGALRM時鐘定時信號, 計算的是實際的時間或時鐘時間。alarm函數使用該信號。

SIGCHLD子進程結束時, 父進程會收到這個信號。

例1:

<?phpdeclare(ticks = 1);//信號處理函數function sig_func() { echo 'child exit rn';}//設置信號處理器pcntl_signal(SIGCHLD, ’sig_func’);$pid = pcntl_fork();if($pid == -1) { die(’fork error’);} else if ($pid) { pcntl_wait($status);} else { echo 'child... rn'; exit;}

當子進程退出時,會向父進程發送SIGCHLD信號,我們通過設置信號處理器,成功的處理信號。

例2:

<?phpdeclare(ticks = 1);//信號處理函數function sig_func($signo) { switch($signo) { case SIGCHLD: { echo 'child SIGCHLD rn'; break; } case SIGTERM: { echo 'child SIGTERM rn'; break; } default: //處理所有其他信號 break; }}//設置信號處理器pcntl_signal(SIGCHLD, ’sig_func’);//設置信號處理器pcntl_signal(SIGTERM, ’sig_func’);$pid = pcntl_fork();if($pid == -1) { die(’fork error’);} else if ($pid) { pcntl_wait($status);} else { sleep(3); echo 'child rn'; sleep(3); posix_kill(getmypid(), SIGTERM); exit;}

父進程等待子進程的退出,子進程等待3秒后輸出child,再等待3秒后向自身發送結束程序信號。

例3:

<?phpdeclare(ticks = 1);//信號處理函數function sig_func($signo) { switch($signo) { case SIGCHLD: { echo 'child SIGCHLD rn'; break; } /*這里要把處理SIGTERM信號的代碼注釋掉 case SIGTERM: { echo 'child SIGTERM rn'; break; }*/ default: //處理所有其他信號 break; }}//設置信號處理器pcntl_signal(SIGCHLD, ’sig_func’);//設置信號處理器,也注釋掉//不然當父進程發向子進程發送SIGTERM信號時,子進程不會退出,還會繼續執行//我們的信號處理函數把SIGTERM給忽略了//pcntl_signal(SIGTERM, ’sig_func’);$pid = pcntl_fork();if($pid == -1) { die(’fork error’);} else if ($pid) { sleep(30); posix_kill($pid, SIGTERM);} else { $cnt = 0; for(;;) { sleep(3); echo $cnt, ’-’; ++$cnt; } exit;}

父進程在等待30秒后,向子進程發送SIGTERM結束程序信號。如果我們設置了SIGTERM信號的處理器,并且在自定義信號處理器中并沒有殺死該進程,則該子進程會一直運行下去。

pcntl_signal()函數僅僅是注冊信號和它的處理方法,真正接收到信號并調用其處理方法的是pcntl_signal_dispatch()函數。

例4:

<?php//使用ticks需要PHP 4.3.0以上版本//declare(ticks = 1);function sig_func() { echo 'SIGALRM rn';}//設置信號處理器pcntl_signal(SIGALRM, ’sig_func’);pcntl_alarm(3);

通過函數pcntl_alarm()3秒后給進程發送SIGALRM信號,但信號處理函數并未調用。原因是我們注釋了declare(ticks = 1);這段代碼,而又沒有調用pcntl_signal_dispatch()函數。

declare(ticks = 1);表示每執行一條低級指令,就檢查一次信號,如果檢測到注冊的信號,就調用其信號處理器。但是這種處理方式效率很低,建議在代碼循環中通過pcntl_signal_dispatch()來處理信號。

<?php//使用ticks需要PHP 4.3.0以上版本//declare(ticks = 1);function sig_func() { echo 'SIGALRM rn';}//設置信號處理器pcntl_signal(SIGALRM, ’sig_func’);pcntl_alarm(3);//因為3秒后pcntl_alarm函數才會給進程發送SIGALRM信號//所以我們通過sleep函數等待3秒后,調用pcntl_signal_dispatch()來處理信號sleep(3);pcntl_signal_dispatch();

pcntl_signal_dispatch()這個函數是PHP5.3以上才支持的,如果你的PHP版本大于5.3,建議使用這個方法調用信號處理器。5.3以下的版本需要在注冊信號之前加上:declare(ticks = 1);

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP進程與線程操作技巧總結》、《PHP網絡編程技巧總結》、《PHP基本語法入門教程》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

標簽: PHP
相關文章:
主站蜘蛛池模板: 小港信息港-鹤壁信息港 鹤壁老百姓便民生活信息网站 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 微动开关厂家-东莞市德沃电子科技有限公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 牛奶检测仪-乳成分分析仪-北京海谊 | 深圳善跑体育产业集团有限公司_塑胶跑道_人造草坪_运动木地板 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | 混合反应量热仪-高温高压量热仪-微机差热分析仪DTA|凯璞百科 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 三防漆–水性三防漆–水性浸渍漆–贝塔三防漆厂家 | 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 液氨泵,液化气泵-淄博「亚泰」燃气设备制造有限公司 | 十字轴_十字轴万向节_十字轴总成-南京万传机械有限公司 | 注塑_注塑加工_注塑模具_塑胶模具_注塑加工厂家_深圳环科 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 退火炉,燃气退火炉,燃气热处理炉生产厂家-丹阳市丰泰工业炉有限公司 | 变色龙PPT-国内原创PPT模板交易平台 - PPT贰零 - 西安聚讯网络科技有限公司 | 暴风影音| 电主轴,车床电磨头,变频制动电机-博山鸿达特种电机 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 兰州牛肉面加盟,兰州牛肉拉面加盟-京穆兰牛肉面 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 私人别墅家庭影院系统_家庭影院音响_家庭影院装修设计公司-邦牛影音 | 电动液压篮球架_圆管地埋式篮球架_移动平箱篮球架-强森体育 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 |