URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7428
[ Назад ]

Исходное сообщение
"секция END в перл скриптах"

Отправлено iliya , 19-Июн-08 14:34 
Добрый день, а не подскажите ли способ выхода из перл скрипта так, что бы не выполнялась секция END
нужно такой выход поставить в child ветку fork'a вместо exit'a
спасибо

Содержание

Сообщения в этом обсуждении
"секция END в перл скриптах"
Отправлено angra , 19-Июн-08 15:04 
Сделайте exec или подайте себе извращенный сигнал :)


"секция END в перл скриптах"
Отправлено iliya , 19-Июн-08 17:45 
>Сделайте exec или подайте себе извращенный сигнал :)

не понял, что значит сделать exec? мне надо завершить выполнение скрипта.
я вот тут придумал поставить не exit; а kill 9,$$


"секция END в перл скриптах"
Отправлено iliya , 20-Июн-08 14:55 
не будет больше предложений как завершить скрипт без выполнения END секции. вот, например, перл функция system не выполняет эту секцию, хотя внутри нее также происходит fork

в общем и целом получается такая схема:
есть процесс proc1.pl
примерно следующего содержания:
INIT {some actions}
END {some actions}
exit(main());
sub main()
{
<actions>
my_system("command for execute");
<actions>
}

функция my_system написана мной, как замена для функции system(сделано по идейным соображениям и для некоторых полезностей, например, собрать output)
в этой функции происходит следующее:
sub my_system
{
<actions>
$pid=fork;
if($pid)
{parent branch
  waitpid($pid,0);
}
elsif($pid==0)
{child actions
  run3("command for execute");
  <proccessing>
  exit;
}
}

происходит следующее, функцией my_system создается копия процесса proc1, из чилда запускается команда "command for execute", чилд процесс proc1 завершается по exit'y
и, суть вопроса, из чилдового процесса запускается на выполнение секция END.
вот собственно вопрос, как завершить чилд так, что бы не выполняласьэта END секция. совершенно определенно, что эта секция - грязь :( но убирать ее нельзя, по некоторым причинам :(
сейчас как work around введен очень грязный солюшн послать самому себе kill, тоесть заменить exit на kill 9,$$. это не правильно. порекомендуйте пожалуйста другой способ завершения процесса. спасибо


"секция END в перл скриптах"
Отправлено rWizard , 22-Июн-08 05:53 
Ответ немного не соответствует поставленному вопросу, но всё-же:
END {if ($? != 666 ){some actions }}

sub my_system
{
<cut>
  exit 666;
<cut>
}


"секция END в перл скриптах"
Отправлено iliya , 22-Июн-08 16:59 
>Ответ немного не соответствует поставленному вопросу, но всё-же:
>END {if ($? != 666 ){some actions }}
>
>sub my_system
>{
><cut>
>  exit 666;
><cut>
>}

спасибо! :) в эту область я думал, но не до конца :)) попробую заимплементить такой вариант


"секция END в перл скриптах"
Отправлено iliya , 25-Июн-08 14:25 
спасибо всем откликнувшимся :)
проблема решена:
In addition to those methods already mentioned, POSIX::_exit() will not run END blocks.