????JFIF??x?x????'
| Server IP : 79.136.114.73 / Your IP : 216.73.216.28 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/b8009/php-5.6.22/ext/sysvsem/tests/ |
Upload File : |
--TEST--
sem_acquire with nowait
--SKIPIF--
<?php // vim600: ts=4 sw=4 syn=php fdm=marker
if(!extension_loaded('sysvsem') || !extension_loaded('pcntl')) {
die("skip sysvsem and pcntl required");
}
?>
--FILE--
<?php
$SEMKEY = ftok(__FILE__, 'P'); // Semaphore key
$pid = pcntl_fork();
if ($pid) {
echo "Parent.\n";
pcntl_signal(SIGCHLD, SIG_IGN);
// Get semaphore
$sem_id = sem_get($SEMKEY, 1);
if ($sem_id === FALSE) {
echo "P: fail to get semaphore";
exit;
}
echo "P: got semaphore $sem_id.\n";
register_shutdown_function(function () use ($sem_id) {
echo "P: cleanup.\n";
sem_remove($sem_id);
});
// Acquire semaphore
if (! sem_acquire($sem_id)) {
echo "P: fail to acquire semaphore $sem_id.\n";
sem_remove($sem_id);
exit;
}
echo "P: success acquire semaphore $sem_id.\n";
usleep(20000);
echo "P: releases.\n";
sem_release($sem_id);
usleep(5000);
// Acquire semaphore
if (! sem_acquire($sem_id)) {
echo "P: fail to acquire semaphore $sem_id.\n";
sem_remove($sem_id);
exit;
}
echo "P: success acquire semaphore $sem_id.\n";
$status = null;
pcntl_waitpid($pid, $status);
} else {
usleep(10000);
echo "Child.\n";
// Get semaphore
$sem_id = sem_get($SEMKEY, 1);
if ($sem_id === FALSE) {
echo "C: fail to get semaphore";
exit;
}
echo "C: got semaphore $sem_id.\n";
// Acquire semaphore
if (! sem_acquire($sem_id)) {
echo "C: fail to acquire semaphore $sem_id.\n";
exit;
}
echo "C: success acquire semaphore $sem_id.\n";
echo "C: releases.\n";
sem_release($sem_id);
usleep(10000);
// Acquire semaphore
if (! sem_acquire($sem_id, true)) {
echo "C: fail to acquire semaphore $sem_id.\n";
exit;
}
echo "C: success acquire semaphore $sem_id.\n";
}
?>
--EXPECTF--
Parent.
P: got semaphore Resource id #%i.
P: success acquire semaphore Resource id #%i.
Child.
C: got semaphore Resource id #%i.
P: releases.
C: success acquire semaphore Resource id #%i.
C: releases.
P: success acquire semaphore Resource id #%i.
C: fail to acquire semaphore Resource id #%i.
P: cleanup.