실제로 적용이 잘 안됨
CLI SAPI max_execution_time은 0으로 하드코딩 되어 있기 때문인데,
이 경우 timeout 이라는 shell command를 이용해서 처리함
sleep.php
<?php
define('_SLEEP', 5);
for ($i = 0; $i < _SLEEP; $i++)
{
echo "{$i}\n";
sleep(1);
}
exit(0);
?>
timeout_test.php
<?php
set_time_limit(4);
for ($i = 0; $i < 3; $i++)
{
echo "{$i}\n";
sleep(1);
}
echo "-- S result --\n";
echo shell_exec('php ./sleep.php');
echo "-- E result --\n";
echo "{$i}\n";
exit(0);
?>
timeout이 4초인데도 불구하고 전체 실행 다 됨 <= cli에서 set_time_limit() 안먹음
CLI SAPI max_execution_time은 0으로 하드코딩 되어 있음
$ php timeout_test.php
0
1
2
-- S result --
0
1
2
3
4
-- E result --
3
아래와 같이 timeout라는 shell command를 이용해서 실행가능함
4초가 넘어가는 경우에는 프로세스를 kill 해버림
$ timeout 4 php timeout_test.php
0
1
2
-- S result --
아래 두 명령으를 동시해 실행해 봤을때 timeout이 걸렸을때 자식프로세스(sleep.php)까지 같이 kill 함
$ timeout 5 php timeout_test.php
0
1
2
-- S result --
$
$ ps -ef | grep php
kilim 3346 32307 0 15:28 pts/14 00:00:00 timeout 5 php timeout_test.php
kilim 3347 3346 0 15:28 pts/14 00:00:00 php timeout_test.php
kilim 3349 3347 0 15:28 pts/14 00:00:00 sh -c php ./sleep.php
kilim 3350 3349 1 15:28 pts/14 00:00:00 php ./sleep.php
$
$ ps -ef | grep php
$
'PHP' 카테고리의 다른 글
외부 접속 지연 timeout - default_socket_timeout (0) | 2012.01.31 |
---|