|
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
|