ru_php/ext/pcntl/tests/pcntl_waitid_rusage.phpt

73 lines
1.7 KiB
PHP

--TEST--
pcntl_waitid() and rusage
--EXTENSIONS--
pcntl
posix
--SKIPIF--
<?php
if (!function_exists('pcntl_waitid')) die('skip pcntl_waitid unavailable');
if (!str_contains(PHP_OS, 'Linux') && !str_contains(PHP_OS, 'FreeBSD')) {
die('skip pcntl_waitid can return rusage only on FreeBSD and Linux');
}
?>
--FILE--
<?php
$pid = pcntl_fork();
if ($pid == -1) {
die('failed');
} else if ($pid) {
var_dump(pcntl_waitid(P_PID, $pid, $siginfo, WSTOPPED, $rusage));
var_dump($rusage['ru_utime.tv_sec']);
var_dump($rusage['ru_utime.tv_usec']);
$rusage = array(1,2,3);
posix_kill($pid, SIGCONT);
var_dump(pcntl_waitid(P_PID, $pid, $siginfo, WCONTINUED, $rusage));
var_dump($rusage['ru_utime.tv_sec']);
var_dump($rusage['ru_utime.tv_usec']);
posix_kill($pid, SIGUSR1);
var_dump(pcntl_waitid(P_PID, $pid, $siginfo, WEXITED, $rusage));
var_dump($rusage['ru_maxrss']);
var_dump($siginfo['status']);
$rusage = 'string';
var_dump(pcntl_waitid(P_PID, $pid, $siginfo, WEXITED | WNOHANG, $rusage));
var_dump(gettype($rusage));
var_dump(count($rusage));
$rusage = new stdClass;
var_dump(pcntl_waitid(P_PID, $pid, $siginfo, WEXITED | WNOHANG, $rusage));
var_dump(gettype($rusage));
var_dump(count($rusage));
fwrite(STDOUT, 'END' . PHP_EOL);
} else {
pcntl_signal(SIGUSR1, function ($_signo, $_siginfo) { exit(42); });
posix_kill(posix_getpid(), SIGSTOP);
$nanoseconds = 100;
while (true) {
pcntl_signal_dispatch();
time_nanosleep(0, $nanoseconds);
$nanoseconds *= 2;
}
}
?>
--EXPECTF--
bool(true)
int(%d)
int(%d)
bool(true)
int(%d)
int(%d)
bool(true)
int(%d)
int(42)
bool(false)
string(5) "array"
int(0)
bool(false)
string(5) "array"
int(0)
END