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

Исходное сообщение
"Убить все процессы порожденные скриптом"

Отправлено Vaur , 31-Мрт-11 15:41 
1. script:

ourfunc()
{
while read line; do
echo $line | grep "выбираем" > file2.log
done < /dev/stdin
}

/usr/bin/tail -F file1.log | ourfunc


2. Запускаем script из консоли, работает...
Делаем Ctrl-C, скрипт остановился все ок, все запущенные script'ом процессы остановились.

3. Запускаем скрипт:
# daemon script

Делаем:
kill -9 pid_scripta

Видим, что в процессах script отсутствует, но остался процесс:
/usr/bin/tail -F file1.log

4. Почему так, ведь родительский процесс убит?

Еще: если сразу убить процесс /usr/bin/tail -F file1.log
то и родительский процесс script помрет...

5. Как правильно убить script, что бы не осталось порожденных процессов?



Содержание

Сообщения в этом обсуждении
"процессы порожденные скриптом"
Отправлено Andrey Mitrofanov , 31-Мрт-11 15:56 
> ourfunc()
> {
> while read line; do
> echo $line | grep "выбираем" > file2.log
> done < /dev/stdin
> }

Про убивание ничего не скажу, но эта конструкция глаз режет. Надо так:

ourfunc()
{
grep "выбираем" > file2.log
}

> /usr/bin/tail -F file1.log | ourfunc


"процессы порожденные скриптом"
Отправлено Vaur , 31-Мрт-11 20:28 
Проходили :)
Тогда он выберет всего одну строку,
а мне надо на лету все строки брать.

"процессы порожденные скриптом"
Отправлено Andrey Mitrofanov , 01-Апр-11 10:09 
> Проходили :)
> Тогда он выберет всего одну строку,
> а мне надо на лету все строки брать.

Ааа, вижу. Только не "всего одну", а при убивании скрипта, наверное, буферизация приводит к потере данных.


"Убить все процессы порожденные скриптом"
Отправлено sany , 31-Мрт-11 17:24 
> 5. Как правильно убить script, что бы не осталось порожденных процессов?

нужно послать группе процессов, то есть послать отрицательному пиду.
например pid=4567

kill -TERM -4567


"Убить все процессы порожденные скриптом"
Отправлено Waur , 31-Мрт-11 20:32 
Помогло! Спасибо.