Главная страница


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)
 
 

Вернуться к списку тем, сортированных по:

 Тема:    Автор:    Дата:  
 отследить зависание отпрыска cgi скрипта   Andrew Muhametshin   22 Jan 2004 14:04:51 
 Re: отследить зависание отпрыска cgi скрипта   Artem Chuprina   22 Jan 2004 17:56:05 
Архивное /ru.cgi.perl/542428abe787.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional