首页 > 代码库 > PHP进程信号处理

PHP进程信号处理

PHP的pcntl扩展提供了信号处理的功能,利用它可以让PHP来接管信号的处理,在开发服务器端守护进程方面,信号处理至关重要。pcntl这个扩展仅在cli/cgi模式下可用。mod_php和php-fpm中不可以使用。PHP在编译的过程中,并没有把pcntl连接到php-cli可执行文件中。

函数原型:

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

第一个参数是信号ID,具体可以参见这里http://swoole.sinaapp.com/archives/124

第二个参数是信号发生时回调的PHP函数。

第三个参数是是否restart,是否重新注册此信号。这个参数如果为false,那此信号只注册处理一次。

<?php//信号处理需要注册ticks才能生效,这里务必注意//PHP5.4以上版本就不再依赖ticks了declare(ticks = 1);function sig_handler($signo){switch ($signo) {case SIGUSR1:echo "SIGUSR1\n";break;case SIGUSR2:echo "SIGUSR2\n";break;default:echo "unknow";break;}}pcntl_signal(SIGUSR1, "sig_handler");pcntl_signal(SIGUSR2, "sig_handler");posix_kill(posix_getpid(), SIGUSR1);posix_kill(posix_getpid(), SIGUSR2);?>

 

PHP进程信号处理