|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrew Muhametshin 2:5020/400 22 Jan 2004 14:04:51 To : All Subject : отследить зависание отпрыска cgi скрипта --------------------------------------------------------------------------------
Подсобите с решением.
Hужно из cgi скрипта запустить внешнюю программу(convert от
ImageMagick), дождаться завершения и продолжить скрипт.
Hо этот convert дебильный, на некоторых файлах(16бит на канал),
мгновенно съедает всю память и намертво вешает машину, но это то не
проблема, "limit -v 100m" все решает, но в результате этот процесс
начинает работать "вечно", хоть бы в корку выпал, а он и ни туда и ни
сюда. Само собой при такой фигне бровзер отрубается по таймауту, а
скрипт так и остается болтаться, да еще и ресурсы жрет немерено.
Так вот, как мне грамотно запустить из скрипта дочернюю программу и при
этом прибить ее если она зациклилась, да еще что бы скрипт что нибудь
посылал клиенту что бы тот не отвалился по таймату пока работает внешняя
программа.
В общем меня хватило только на стандартные варианты, за неимением
больших навыков.
Думал сделать так :
=============================================================
var $alrm_count = 0;
$SIG{ALRM} = sub {
if($alrm_count == 10){die "прерываем eval";}
else{
$alrm_count++;
print "Чтобы клиент не отрубился";
alarm(10);
}
};
eval{
alarm(10);
$pid = open(CONVERT, 'convert EXPR1 EXPR2 |');
while (<CONVERT>){print "<BR>";}
### $stat = system("convert", "arg1", "arg2");
alarm(0);
};
if($@ =~ "прерываем eval"){kill 9 => $pid;}
=============================================================
Hо это не работает, вернее это решает только уничтожение convert если
тот не завершается сам в течении 100 сек., но во время работы скрипт
ничего не посылает бровзеру и тот через какой то промежуток отрубается.
А если использовать вместо open system, то как узнать его PID, что бы
потом его кильнуть.
Вот собственно и все. Поможите люди добрые!
Андрей М.
P.S. У ImageMAgick есть модули к перлу, но думаю если сам convert вешает
машину то модуль и подавно будет это делать.
--- ifmail v.2.15dev5.1
* Origin: Golden Telecom (2:5020/400)
Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/542428abe787.html, оценка из 5, голосов 10
|