亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

php如何處理進程信號(附實例)

2020-03-22 17:39:51
字體:
來源:轉載
供稿:網友
本篇文章給大家帶來的內容是關于php如何處理進程信號(附實例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

php有一組進程控制函數PCNTL,使得php能在*nix系統中實現跟c一樣的創建子進程、使用exec函數執行程序、處理信號等功能。

注意:pcntl這個擴展僅在cli/cgi模式下可用。mod_php和php-fpm中不可以使用。在web server環境中不要使用這組函數,因為會導致不可預料的結果。另,windows作為非類unix系統,沒有這些函數。

PCNTL 使用ticks來作為信號處理機制(signal handle callback mechanism),可以最小程度地降低處理異步事件時的負載。何謂ticks?Tick 是一個在代碼段中解釋器每執行 N 條低級語句就會發生的事件,這個代碼段需要通過declare來指定。

下面是一個隔5秒發送一個SIGALRM信號,并由signal_handler函數獲取,然后打印一個“Caught SIGALRM”的例子:

 ?php  declare(ticks = 1);  function signal_handler($signal) {  print Caught SIGALRM/n  pcntl_alarm(5);  pcntl_signal(SIGALRM, signal_handler , true);  pcntl_alarm(5);  while(true){ ? 

其實官方的pcntl_signal性能極差,主要是PHP的函數無法直接注冊到操作系統信號設置中,所以pcntl信號需要依賴tick機制來完成。 pcntl_signal的實現原理是,觸發信號后先將信號加入一個隊列中。然后在PHP的ticks回調函數中不斷檢查是否有信號,如果有信號就執行PHP中指定的回調函數,如果沒有則跳出函數。 ticks=1表示每執行1行PHP代碼就回調此函數。實際上大部分時間都沒有信號產生,但ticks的函數一直會執行。 比較好的做法是去掉ticks,轉而使用pcntl_signal_dispatch,在代碼循環中自行處理信號。

pcntl_signal_dispatch的實現
 ?php// 定義一個處理器,接收到SIGINT信號后只輸出一行信息function signalHandler($signo) { switch ($signo) { case SIGUSR1: echo SIGUSR1/n break; case SIGUSR2: echo SIGUSR2/n break; default: echo unknow break;//安裝信號觸發器器pcntl_signal(SIGINT, signalHandler while (true) { sleep(1); posix_kill(posix_getpid(), SIGUSR1);///向當前進程發送SIGUSR1信號 pcntl_signal_dispatch(); //接收到信號時,調用注冊的signalHandler()}
PCNTL的函數:信號處理
int pcntl_alarm ( int $seconds )

設置一個$seconds秒后發送SIGALRM信號的計數器

bool pcntl_signal(int $signo ,callback $handler [,bool $restart_syscalls=true])

為$signo設置一個處理該信號的回調函數

第一個參數是信號編號 第二個參數是信號發生時回調的html' target='_blank'>PHP函數。 第三個參數是是否restart,是否重新注冊此信號。這個參數如果為false,那此信號只注冊處理一次。

注意:每次對 pcntl_alarm()的調用都會取消之前設置的alarm信號和sleep()函數。

下面是一個隔5秒發送一個SIGALRM信號,并由signal_handler函數獲取,然后打印一個“Caught SIGALRM”的例子:

 ?php  declare(ticks = 1);  function signal_handler($signal) {  print Caught SIGALRM/n  pcntl_alarm(5);  pcntl_signal(SIGALRM, signal_handler , true);  pcntl_alarm(5);  for(;;) {  ? 
執行程序
void pcntl_exec ( string $path [, array $args [, array $envs ]] )

在當前的進程空間中執行指定程序,類似于c中的exec族函數。所謂當前空間,即載入指定程序的代碼覆蓋掉當前進程的空間,執行完該程序進程即結束。

 ?php  $dir = /home/test/  $cmd = ls  $option = -l  $pathtobin = /bin/ls  $arg = array($cmd, $option, $dir);  pcntl_exec($pathtobin, $arg);  echo 123 //不會執行到該行  ? 
創建進程
int pcntl_fork ( void ) 為當前進程創建一個子進程int pcntl_wait ( int $status [, int $options ] ) 阻塞當前進程,只到當前進程的一個子進程退出或者收到一個結束當前進程的信號。 int pcntl_waitpid ( int $pid , int $status [, int $options ] ) 功能同pcntl_wait,區別為waitpid為等待指定pid的子進程。當pid為-1時pcntl_waitpid與pcntl_wait一樣。

在 pcntl_wait和pcntl_waitpid兩個函數中的$status中存了子進程的狀態信息,這個參數可以用于 pcntl_wifexited、pcntl_wifstopped、pcntl_wifsignaled、pcntl_wexitstatus、 pcntl_wtermsig、pcntl_wstopsig、pcntl_waitpid這些函數。

舉個例子

 ?php  $pid = pcntl_fork();  if($pid) {  pcntl_wait($status);  $id = getmypid();  echo parent process,pid {$id}, child pid {$pid}/n  } else {  $id = getmypid();  echo child process,pid {$id}/n  sleep(2);  ? 

子進程在輸出child process等字樣之后sleep了2秒才結束,而父進程阻塞著直到子進程退出之后才繼續運行。

進程優先級
int pcntl_getpriority ([ int $pid [, int $process_identifier ]] ) 取得進程的優先級,即nice值,默認為0。不同的系統類型以及內核版本下 優先級可能不同(手冊中為-20到20)bool pcntl_setpriority ( int $priority [, int $pid [, int $process_identifier ]] ) 設置進程的優先級

以上就是php如何處理進程信號(附實例)的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性色av一区二区咪爱| 在线中文字幕日韩| 国产精品中文字幕在线观看| 91国产精品电影| 亚洲社区在线观看| 国产在线视频一区| 国产日韩在线视频| 欧美小视频在线| 91成人性视频| 国产精品青青在线观看爽香蕉| 免费91麻豆精品国产自产在线观看| 国产精品视频26uuu| 成人美女免费网站视频| 久久久久久综合网天天| 国内精品久久久久影院 日本资源| 97视频国产在线| 亚洲xxxx做受欧美| 国产精品久久久久久久久久久久| 成人做爰www免费看视频网站| 97超级碰碰碰久久久| 日韩精品高清在线观看| 亚洲最大在线视频| 91影视免费在线观看| 日韩久久精品成人| www亚洲欧美| 欧美激情一区二区三区在线视频观看| 久久精品国产清自在天天线| 久久国产精品偷| 亚洲欧美精品一区| 91午夜理伦私人影院| 国产精品日韩在线播放| 一本久久综合亚洲鲁鲁| 亚洲一区av在线播放| 国产成人久久久精品一区| 欧美影院成年免费版| 欧美成人剧情片在线观看| 日韩电影中文 亚洲精品乱码| 色琪琪综合男人的天堂aⅴ视频| 国产精品免费网站| 在线日韩第一页| 韩剧1988在线观看免费完整版| 成人精品aaaa网站| 久久精品最新地址| 国语自产偷拍精品视频偷| 国产成人精品免费视频| 热久久视久久精品18亚洲精品| 色一情一乱一区二区| 日韩中文在线不卡| 日韩av成人在线观看| 亚洲欧美国产精品久久久久久久| 欧美丰满少妇xxxxx| 日本电影亚洲天堂| 成人av番号网| 97久久久久久| 日韩av电影手机在线| 亚洲综合在线小说| 久久精品视频亚洲| 亚洲第一福利网站| 亚洲日本欧美日韩高观看| 色噜噜狠狠狠综合曰曰曰| 国产精品精品久久久| 久久久久久久av| 日韩美女视频免费在线观看| 中文字幕亚洲精品| 亚洲国产欧美日韩精品| www.日韩av.com| 久久久电影免费观看完整版| 久久99视频免费| 亚洲另类图片色| 日韩中文字幕av| 亚洲欧美激情一区| 日韩中文字幕精品视频| 92看片淫黄大片看国产片| 国产日韩欧美夫妻视频在线观看| 97在线观看免费高清| 精品国偷自产在线视频99| 欧美大成色www永久网站婷| 日本一欧美一欧美一亚洲视频| 亚洲欧美日韩中文视频| 日韩一区二区三区国产| 中文字幕久热精品在线视频| 在线中文字幕日韩| 久久全球大尺度高清视频| 国产精品视频导航| 超在线视频97| 亚洲精品wwww| 欧美视频在线视频| 亚洲性日韩精品一区二区| 亚洲视频777| 欧美交受高潮1| 55夜色66夜色国产精品视频| 91大神在线播放精品| 国产不卡av在线免费观看| 欧美一级bbbbb性bbbb喷潮片| 色婷婷亚洲mv天堂mv在影片| 国产精品av电影| 久久这里有精品视频| 精品久久久久久久久久| 久久久中文字幕| 午夜伦理精品一区| 国产精品av电影| 美女啪啪无遮挡免费久久网站| 日韩激情在线视频| 91色精品视频在线| 亚洲一区二区黄| 欧美日韩在线视频观看| 精品小视频在线| 亚洲视频在线视频| 中文字幕久久精品| 91高潮在线观看| 欧美日产国产成人免费图片| 久久99亚洲热视| 日韩美女写真福利在线观看| 精品久久久视频| 九九九热精品免费视频观看网站| 日韩av电影国产| 国产综合福利在线| 欧美成人一二三| 亚洲精品国产综合区久久久久久久| 亚洲va欧美va在线观看| 欧美激情一区二区三区在线视频观看| 国产精品视频一区国模私拍| 欧美日韩国产综合新一区| 久久九九有精品国产23| 一区二区三区在线播放欧美| 亚洲自拍偷拍一区| 欧美性猛交视频| 日韩成人在线视频网站| 日韩一级裸体免费视频| 亚洲国产精品va在线看黑人| 美日韩在线视频| 亚洲欧美日韩久久久久久| 亚洲已满18点击进入在线看片| 日韩欧美福利视频| 久久97久久97精品免视看| 欧美韩国理论所午夜片917电影| 中文字幕精品www乱入免费视频| 精品久久久国产精品999| 97精品一区二区三区| 国产不卡av在线| 中文字幕av一区中文字幕天堂| 国产精品欧美一区二区三区奶水| 国产精品∨欧美精品v日韩精品| 亚洲欧美日韩综合| 久久亚洲精品小早川怜子66| 亚洲一区二区日本| 色狠狠av一区二区三区香蕉蜜桃| 精品日韩视频在线观看| 亚洲第一区中文99精品| 永久免费看mv网站入口亚洲| 久久视频免费观看| 欧美福利在线观看| 亚洲欧美日韩国产成人| 国产精品成人品| 亚洲精品wwww| 国产精品爽爽ⅴa在线观看| 日韩精品久久久久久久玫瑰园| 在线观看日韩视频| 91亚洲va在线va天堂va国| 狠狠色狠色综合曰曰| 国产成人啪精品视频免费网| 国产亚洲aⅴaaaaaa毛片| 97色在线播放视频| 亚洲欧美日韩天堂一区二区|