The OpenNET Project / Index page

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

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

"обработка сигналов в перл"  
Сообщение от iliya email on 07-Апр-08, 15:10 
добрый день.
возникла следующая проблемма:
есть перл скрипт примерно следующего содержания:
#!/usr/bin/perl
use strict;
$SIG{'INT'}  = 'IGNORE';
$SIG{'TERM'} = 'IGNORE';
$SIG{'HUP'}  = 'IGNORE';
$SIG{'TSTP'} = 'IGNORE';
$SIG{'QUIT'} = 'IGNORE';
system("./signalsUtil.sh");
вызываемый из перла баш скрипт
$cat signalsUtil.sh
#!/bin/sh
start()
{
   ./to4ki.sh &
   PIDS=$!
}
stop()
{
   if [ ${PIDS} -ne -2 ]; then
      kill -15 ${PIDS}
      PIDS=-2
   fi
}
start
echo "start with $PIDS"
sleep 7
stop

и $cat to4ki.sh
#!/bin/sh
trap  'trap "" 15; echo ""; exit 0' 15

while true
do
  sleep 1
    echo -n "."
done

exit 0

проблемма в следующем, форкнутые от перла процессы наследуют игнорирование сигналов и в скрипте signalsUtil.sh не срабатывает kill -15 и точки рисуются вечно. как можно это починить, кроме как использовать kill -9? например, возможно ли сказать перл скрипту, что он и только он игнорирует сигналы, а форкнутые процессы обрабатывают их в обычном порядке.

заранее спасибо

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

 Оглавление

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


1. "обработка сигналов в перл"  
Сообщение от NuINu (??) on 08-Апр-08, 12:32 
>добрый день.
>возникла следующая проблемма:
>есть перл скрипт примерно следующего содержания:
>заранее спасибо

я вижу два пути:
первое:
в программ стартере написать:
sub ignore {
    print "Get INTTERM, ignore!\n";
}

$SIG{'TERM'} = \&ignore;
тогда в баше будет устанавливаться трап и нормально срабатывать. а о том устанавливается он или нет можно судить по команде
trap -p

второе:
заменить программу точки.sh на программу точки.pl
#!/usr/bin/perl

use strict;
use IO::Handle;

sub stop {
    print "Get INTTERM, quit!\n";
    exit(0);
}

$SIG{'TERM'} = \&stop;

STDOUT->autoflush(1);

while (1) {
    print  ".";
    sleep (1);
}
exit(0);

в отличии от баша перл нормально выставит обработчик сигнала.

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

2. "обработка сигналов в перл"  
Сообщение от iliya email on 08-Апр-08, 14:31 
>[оверквотинг удален]
>первое:
>в программ стартере написать:
>sub ignore {
>    print "Get INTTERM, ignore!\n";
>}
>
>$SIG{'TERM'} = \&ignore;
>тогда в баше будет устанавливаться трап и нормально срабатывать. а о том
>устанавливается он или нет можно судить по команде
>trap -p

огромное спасибо :) все вылечилось :)
как мнгого я еще не знаю :)

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

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

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




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

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