Annotation of embedaddon/php/ext/pcntl/tests/002.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: pcntl: pcntl_sigprocmask(), pcntl_sigwaitinfo(), pcntl_sigtimedwait()
! 3: --SKIPIF--
! 4: <?php
! 5: if (!extension_loaded('pcntl')) die('skip pcntl extension not available');
! 6: elseif (!extension_loaded('posix')) die('skip posix extension not available');
! 7: elseif (!function_exists('pcntl_sigwaitinfo') or !function_exists('pcntl_sigtimedwait')) die('skip required functionality is not available');
! 8: elseif (!defined('CLD_EXITED')) die('skip CLD_EXITED not defined');
! 9: ?>
! 10: --FILE--
! 11: <?php
! 12:
! 13: $pid = pcntl_fork();
! 14: if ($pid == -1) {
! 15: die('failed');
! 16: } else if ($pid) {
! 17: pcntl_sigprocmask(SIG_BLOCK, array(SIGCHLD,(string)SIGTERM));
! 18: $oldset = array();
! 19: pcntl_sigprocmask(SIG_BLOCK, array(), $oldset);
! 20: var_dump(in_array(SIGCHLD, $oldset));
! 21: var_dump(in_array(SIGTERM, $oldset));
! 22:
! 23: posix_kill(posix_getpid(), SIGTERM);
! 24: $signo = pcntl_sigwaitinfo(array(SIGTERM), $siginfo);
! 25: echo "signo == SIGTERM\n";
! 26: var_dump($signo === SIGTERM && $signo === $siginfo['signo']);
! 27: echo "code === SI_USER || SI_NOINFO\n";
! 28: if (defined('SI_NOINFO')) {
! 29: var_dump(($siginfo['code'] === SI_USER) || ($siginfo['code'] === SI_NOINFO));
! 30: } else {
! 31: var_dump($siginfo['code'] === SI_USER);
! 32: }
! 33:
! 34: pcntl_signal(SIGCHLD, function($signo){});
! 35: posix_kill($pid, SIGTERM);
! 36: $signo = pcntl_sigwaitinfo(array((string)SIGCHLD), $siginfo);
! 37: echo "signo == SIGCHLD\n";
! 38: var_dump($signo === SIGCHLD && $signo === $siginfo['signo']);
! 39: echo "code === CLD_KILLED\n";
! 40: var_dump($siginfo['code'] === CLD_KILLED);
! 41: echo "signo === SIGCHLD\n";
! 42: var_dump($siginfo['signo'] === SIGCHLD);
! 43: echo "signo === uid\n";
! 44: var_dump($siginfo['uid'] === posix_getuid());
! 45: echo "signo === pid\n";
! 46: var_dump($siginfo['pid'] === $pid);
! 47: pcntl_waitpid($pid, $status);
! 48:
! 49: set_error_handler(function($errno, $errstr) { echo "Error triggered\n"; }, E_WARNING);
! 50:
! 51: echo "sigprocmask with invalid arguments\n";
! 52:
! 53: /* Valgrind expectedly complains about this:
! 54: * "sigprocmask: unknown 'how' field 2147483647"
! 55: * Skip */
! 56: if (getenv("USE_ZEND_ALLOC") !== '0') {
! 57: var_dump(pcntl_sigprocmask(PHP_INT_MAX, array(SIGTERM)));
! 58: } else {
! 59: echo "Error triggered\n";
! 60: echo "bool(false)\n";
! 61: }
! 62: var_dump(pcntl_sigprocmask(SIG_SETMASK, array(0)));
! 63:
! 64: echo "sigwaitinfo with invalid arguments\n";
! 65: var_dump(pcntl_sigwaitinfo(array(0)));
! 66:
! 67: echo "sigtimedwait with invalid arguments\n";
! 68: var_dump(pcntl_sigtimedwait(array(SIGTERM), $signo, PHP_INT_MAX, PHP_INT_MAX));
! 69: } else {
! 70: $siginfo = NULL;
! 71: pcntl_sigtimedwait(array(SIGINT), $siginfo, 3600, 0);
! 72: exit;
! 73: }
! 74:
! 75: ?>
! 76: --EXPECTF--
! 77: bool(true)
! 78: bool(true)
! 79: signo == SIGTERM
! 80: bool(true)
! 81: code === SI_USER || SI_NOINFO
! 82: bool(true)
! 83: signo == SIGCHLD
! 84: bool(true)
! 85: code === CLD_KILLED
! 86: bool(true)
! 87: signo === SIGCHLD
! 88: bool(true)
! 89: signo === uid
! 90: bool(true)
! 91: signo === pid
! 92: bool(true)
! 93: sigprocmask with invalid arguments
! 94: Error triggered
! 95: bool(false)
! 96: Error triggered
! 97: bool(false)
! 98: sigwaitinfo with invalid arguments
! 99: Error triggered
! 100: bool(false)
! 101: sigtimedwait with invalid arguments
! 102: Error triggered
! 103: int(-1)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>