mirror of
https://github.com/php/php-src.git
synced 2024-11-23 18:04:36 +08:00
MFH: Added pcntl_signal_dispatch()
[DOC] pcntl_signal_dispatch() allows to dispatch pending signals to registered signal handler functions on-demand. This allows to use pcntl_signal() without ticks.
This commit is contained in:
parent
b6cca30211
commit
204fcbe5d3
@ -134,6 +134,7 @@ const zend_function_entry pcntl_functions[] = {
|
||||
PHP_FE(pcntl_waitpid, arginfo_pcntl_waitpid)
|
||||
PHP_FE(pcntl_wait, arginfo_pcntl_wait)
|
||||
PHP_FE(pcntl_signal, arginfo_pcntl_signal)
|
||||
PHP_FE(pcntl_signal_dispatch, arginfo_pcntl_void)
|
||||
PHP_FE(pcntl_wifexited, arginfo_pcntl_wifexited)
|
||||
PHP_FE(pcntl_wifstopped, arginfo_pcntl_wifstopped)
|
||||
PHP_FE(pcntl_wifsignaled, arginfo_pcntl_wifsignaled)
|
||||
@ -173,7 +174,7 @@ ZEND_GET_MODULE(pcntl)
|
||||
#endif
|
||||
|
||||
static void pcntl_signal_handler(int);
|
||||
static void pcntl_tick_handler();
|
||||
static void pcntl_signal_dispatch();
|
||||
|
||||
void php_register_signal_constants(INIT_FUNC_ARGS)
|
||||
{
|
||||
@ -262,7 +263,7 @@ PHP_RINIT_FUNCTION(pcntl)
|
||||
PHP_MINIT_FUNCTION(pcntl)
|
||||
{
|
||||
php_register_signal_constants(INIT_FUNC_ARGS_PASSTHRU);
|
||||
php_add_tick_function(pcntl_tick_handler);
|
||||
php_add_tick_function(pcntl_signal_dispatch);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
@ -644,6 +645,15 @@ PHP_FUNCTION(pcntl_signal)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto bool pcntl_signal_dispatch()
|
||||
Dispatch signals to signal handlers */
|
||||
PHP_FUNCTION(pcntl_signal_dispatch)
|
||||
{
|
||||
pcntl_signal_dispatch();
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
#ifdef HAVE_GETPRIORITY
|
||||
/* {{{ proto int pcntl_getpriority([int pid [, int process_identifier]])
|
||||
Get the priority of any process */
|
||||
@ -747,7 +757,7 @@ static void pcntl_signal_handler(int signo)
|
||||
PCNTL_G(tail) = psig;
|
||||
}
|
||||
|
||||
void pcntl_tick_handler()
|
||||
void pcntl_signal_dispatch()
|
||||
{
|
||||
zval *param, **handle, *retval;
|
||||
struct php_pcntl_pending_signal *queue, *next;
|
||||
|
@ -44,6 +44,7 @@ PHP_FUNCTION(pcntl_wexitstatus);
|
||||
PHP_FUNCTION(pcntl_wtermsig);
|
||||
PHP_FUNCTION(pcntl_wstopsig);
|
||||
PHP_FUNCTION(pcntl_signal);
|
||||
PHP_FUNCTION(pcntl_signal_dispatch);
|
||||
PHP_FUNCTION(pcntl_exec);
|
||||
#ifdef HAVE_GETPRIORITY
|
||||
PHP_FUNCTION(pcntl_getpriority);
|
||||
|
26
ext/pcntl/tests/pcntl_signal_dispatch.phpt
Normal file
26
ext/pcntl/tests/pcntl_signal_dispatch.phpt
Normal file
@ -0,0 +1,26 @@
|
||||
--TEST--
|
||||
pcnt_signal_dispatch()
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded("pcntl")) print "skip";
|
||||
if (!function_exists("pcntl_signal")) print "skip pcntl_signal() not available";
|
||||
if (!function_exists("pcntl_signal_dispatch")) print "skip pcntl_signal_dispatch() not available";
|
||||
if (!function_exists("posix_kill")) print "skip posix_kill() not available";
|
||||
if (!function_exists("posix_getpid")) print "skip posix_getpid() not available";
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
pcntl_signal(SIGTERM, function ($signo) { echo "Signal handler called!\n"; });
|
||||
|
||||
echo "Start!\n";
|
||||
posix_kill(posix_getpid(), SIGTERM);
|
||||
$i = 0; // dummy
|
||||
pcntl_signal_dispatch();
|
||||
echo "Done!\n";
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Start!
|
||||
Signal handler called!
|
||||
Done!
|
Loading…
Reference in New Issue
Block a user