Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поймать сигнал KILL, OpenSUSE, Perl v5.12 
V
    Опции темы
tishaishii
Дата 7.6.2012, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 0
Всего: 8



Есть процессы "A" и "B"n.
"A" считается "родительским", хотя, таким не является.
Если "A" умер, то все "B"n тоже должны умереть.
Вижу варианты:
  •  в "B"n вызывать alarm и проверять kill ( 0 , $parent_pid ) and kill ( 9 , $$ )
  •  в "A" поставить обработчик $SIG{'KILL'}, который убъёт всех "потомков".

1й вариант тормозит работу "B"n за счёт alarm'ов.
2й вариант - 'KILL' просто так не ловится.

Что сделать?
PM MAIL ICQ Skype   Вверх
DurRandir
Дата 7.6.2012, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: нет
Всего: 17



А в чём тайный смысл убивания (и попытки перехвата) в 1м процессе SIGKILL? Вообще-то, не любое завершение процесса происходит по этому сигналу. Может быть, стоит сначала разобраться, зачем с ним так обходятся?) В противном случае (т.е. если его в случайный момент времени могут убить KILL'ом), у вас остаются только различные вариации 1го способа. Если во 2м приложении исользуется event loop, можно его приспособить.
PM   Вверх
tishaishii
Дата 7.6.2012, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 0
Всего: 8



Тайный умысел: разрабатывается сложная система серверов, которые должны общаться друг с другом и друг от друга зависить.
PM MAIL ICQ Skype   Вверх
Pfailed
Дата 7.6.2012, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Сервера потомки подсоединяются к главному через сокет и пытаются читать из сокета. Главный туда ничего не пишет поэтому они висят в ожидании. Когда главный умирает сокет закрывается и попытка чтения у всех подсоединившихся завершается и они завершают себя.



--------------------
PM MAIL   Вверх
tishaishii
Дата 7.6.2012, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 0
Всего: 8



Ну это опять alarm-ом делается в потомках. А потомки своими делами заняты. На потоки делить, наверное, придётся. Либо, потомкам нужно непрерывно что-то делать своё, кроме как ALRM обрабатывать.
PM MAIL ICQ Skype   Вверх
Pfailed
Дата 8.6.2012, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Нет alarm тут не нужен. fork/потоки/event loop использовать придётся


--------------------
PM MAIL   Вверх
tishaishii
Дата 8.6.2012, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 0
Всего: 8



Ну так и написал.

[hr]

А вот KILL как поймать-то?
Поймал бы и убил кого нужно без всяких дополнительных приспособлений.
Слышал, на C как-то можно. А значит и на Perl.

Это сообщение отредактировал(а) tishaishii - 8.6.2012, 06:23
PM MAIL ICQ Skype   Вверх
Pfailed
Дата 8.6.2012, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



SIGKILL не перехватываемый сигнал. Лучше скажите кто шлёт этот сигнал. И почему бы не слать сигнал который можно перехватить?


--------------------
PM MAIL   Вверх
tishaishii
Дата 8.6.2012, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 0
Всего: 8



Мало ли кто и как будет работать с этим. Сисадминам всё равно.

Добавлено через 2 минуты и 55 секунд
Ну ладно. Буду заниматься, собственно, реализацией контроля.
Большое спасибо за ответы.
PM MAIL ICQ Skype   Вверх
vadiml
Дата 8.6.2012, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: нет
Всего: 7



> 'KILL' просто так не ловится.

$SIG{TERM} = $SIG{INT} = sub {
обработчик
}

Добавлено через 2 минуты и 27 секунд
И заодно добавьте 

$SIG{HUP} = sub {
переоткрытие логов
}

иначе perl может закрыть задачу
PM MAIL Jabber   Вверх
DurRandir
Дата 8.6.2012, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: нет
Всего: 17



>$SIG{TERM} = $SIG{INT}
И где здесь KILL?

>Сисадминам всё равно.
Хорошим - не всё равно. Те же start/stop скрипты отправляют TERM/QUIT, которые вполне можно перехватывать.
PM   Вверх
vadiml
Дата 8.6.2012, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: нет
Всего: 7



$SIG{TERM} = $SIG{INT} = sub {...} ловит обычный kill, 
а kill -9 Вы ни чем не поймаете, так должно быть согласно POSIX.1

Подробнее смотрите man 7 signal
PM MAIL Jabber   Вверх
tishaishii
Дата 22.6.2012, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 0
Всего: 8



Большое спасибо!
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.3539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.