Добрый день, а не подскажите ли способ выхода из перл скрипта так, что бы не выполнялась секция END
нужно такой выход поставить в child ветку fork'a вместо exit'a
спасибо
Сделайте exec или подайте себе извращенный сигнал :)
>Сделайте exec или подайте себе извращенный сигнал :)не понял, что значит сделать exec? мне надо завершить выполнение скрипта.
я вот тут придумал поставить не exit; а kill 9,$$
не будет больше предложений как завершить скрипт без выполнения 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 {if ($? != 666 ){some actions }}sub my_system
{
<cut>
exit 666;
<cut>
}
>Ответ немного не соответствует поставленному вопросу, но всё-же:
>END {if ($? != 666 ){some actions }}
>
>sub my_system
>{
><cut>
> exit 666;
><cut>
>}спасибо! :) в эту область я думал, но не до конца :)) попробую заимплементить такой вариант
спасибо всем откликнувшимся :)
проблема решена:
In addition to those methods already mentioned, POSIX::_exit() will not run END blocks.