= 4.1.0, PHP 5, PHP 7, PHP 8)pcntl_signal — 安裝一個信號處理器說明pcntl_signal(int $signo, callback $handler, bool $restart_syscalls = true):">
(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
pcntl_signal — 安裝一個信號處理器
$signo, callback $handler, bool $restart_syscalls = true): bool
   函數(shù)pcntl_signal()為signo指定的信號安裝一個新
   的信號處理器。
  
signo信號編號。
handler
      信號處理器可以是用戶創(chuàng)建的函數(shù)或方法的名字,也可以是系統(tǒng)常量
       SIG_IGN(譯注:忽略信號處理程序)或SIG_DFL(默認信號處理程序). 
      
注意:
注意當你使用一個對象方法的時候,該對象的引用計數(shù)回增加使得它在你改變?yōu)槠渌幚砘蚰_本結(jié)束之前是持久存在的。
restart_syscalls指定當信號到達時系統(tǒng)調(diào)用重啟是否可用。(譯注:經(jīng)查資料,此參數(shù)意為系統(tǒng)調(diào)用被信號打斷時,系統(tǒng)調(diào)用是否從 開始處重新開始,但根據(jù)http://bugs.php.net/bug.php?id=52121,此參數(shù)存在bug無效。)
   成功時返回 true, 或者在失敗時返回 false。
  
| 版本 | 說明 | 
|---|---|
| 4.3.0 | 
        增加參數(shù)restart_syscalls。
        | 
      
| 4.3.0 | 對象方法可以作為回調(diào)被使用。 | 
| 4.3.0 | PCNTL現(xiàn)在使用了ticks作為信號處理的回調(diào)機制,ticks在速度上遠遠超過了之前的處理機制。 這個變化與“用戶ticks”遵循了相同的語義。您可以使用declare() 語句在程序中指定允許發(fā)生回調(diào)的位置。這使得我們對異步事件處理的開銷最小化。在編譯PHP時 啟用pcntl將始終承擔這種開銷,不論您的腳本中是否真正使用了pcntl。 PHP 4.3.0使用ticks作為信號處理回調(diào)機制,這比以前的機制快了很多。這個變化與 "用戶ticks" 遵循了相同的語義。您可以使用declare() 語句在程序中指定允許發(fā)生回調(diào)的位置。 | 
示例 #1 pcntl_signal()示例
<?php
//使用ticks需要PHP 4.3.0以上版本
declare(ticks = 1);
//信號處理函數(shù)
function sig_handler($signo)
{
     switch ($signo) {
         case SIGTERM:
             // 處理SIGTERM信號
             exit;
             break;
         case SIGHUP:
             //處理SIGHUP信號
             break;
         case SIGUSR1:
             echo "Caught SIGUSR1...\n";
             break;
         default:
             // 處理所有其他信號
     }
}
echo "Installing signal handler...\n";
//安裝信號處理器
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGHUP,  "sig_handler");
pcntl_signal(SIGUSR1, "sig_handler");
// 或者在PHP 4.3.0以上版本可以使用對象方法
// pcntl_signal(SIGUSR1, array($obj, "do_something");
echo "Generating signal SIGTERM to self...\n";
//向當前進程發(fā)送SIGUSR1信號
posix_kill(posix_getpid(), SIGUSR1);
echo "Done\n"
?>