The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"секция END в перл скриптах"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

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

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "секция END в перл скриптах"  
Сообщение от angra (ok) on 19-Июн-08, 15:04 
Сделайте exec или подайте себе извращенный сигнал :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "секция END в перл скриптах"  
Сообщение от iliya email on 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,$$. это не правильно. порекомендуйте пожалуйста другой способ завершения процесса. спасибо

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "секция END в перл скриптах"  
Сообщение от iliya email on 25-Июн-08, 14:25 
спасибо всем откликнувшимся :)
проблема решена:
In addition to those methods already mentioned, POSIX::_exit() will not run END blocks.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру