PHPでマルチスレッドは、あまり需要が無いかもしれませんが。
親プロセスでは、6つの子プロセスを立てる事をしてます。
それぞれの子プロセス内では1から10の乱数を発生させ、
その数値が10だった場合自身のプロセスを終了させるという簡単なものです。
<?php
define("MAX_PROCESS",6);
define("TIMEOUT",10);
$oControl = new main();
class main
{
private $_MAX_PROCESS = MAX_PROCESS;
private $_TIMEOUT = TIMEOUT;
function main()
{
for( $i = 1; $i<= $this->_MAX_PROCESS; $i++ ) {
$pid = pcntl_fork();
if ( $pid == -1 ) {
die( "fork できません\n" );
} else if ( $pid ) {
$pids[ $pid ] = TRUE;
if ( count( $pids ) >= $this->_MAX_PROCESS ) {
unset( $pids[ pcntl_waitpid( -1, $status, WUNTRACED ) ] );
}
} else {
$this->childProcess($i);
}
}
while ( count( $pids ) > 0 ) {
unset( $pids[ pcntl_waitpid( -1, $status, WUNTRACED ) ] );
}
}
function childProcess($my_number)
{
while(1){
// 強制終了時間を指定
pcntl_alarm( $this->_TIMEOUT );
$rand = mt_rand(1,10);
$message = "number=$my_number rand=$rand";
if( $rand == $this->_TIMEOUT ) {
$message .= " end";
}
$message .= PHP_EOL;
echo $message;
sleep( $rand );
}
return true;
}
}