* [Comm] Как убить потомка?
@ 2008-11-30 20:53 Kharitonov A. Dmitry
2008-11-30 21:13 ` Dmitry Chistikov
2008-12-01 9:25 ` Konstantin S. Uvarin
0 siblings, 2 replies; 15+ messages in thread
From: Kharitonov A. Dmitry @ 2008-11-30 20:53 UTC (permalink / raw)
To: community
Как убить потомка?
В скрипте запускается блок в фон. Идентификатор получить могу по $!, но
убивание процесса блока кода не останавливает текущую выполняемую из
блока команду (которую и надо убить).
Моделирование проблемы. Нужно убить sleep. 12428 - это я могу получить
по $!. PID sleep мне из программы не доступен.
[user@eeedima installflash]$ { sleep 30; echo hello; } & ps
[1] 12428
PID TTY TIME CMD
6933 pts/6 00:00:00 bash
12428 pts/6 00:00:00 bash
12429 pts/6 00:00:00 sleep
12430 pts/6 00:00:00 ps
[user@eeedima installflash]$ kill 12428
[1]+ Завершено { sleep 100; echo hello; }
[user@eeedima installflash]$ ps
PID TTY TIME CMD
6933 pts/6 00:00:00 bash
12429 pts/6 00:00:00 sleep
12452 pts/6 00:00:00 ps
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 20:53 [Comm] Как убить потомка? Kharitonov A. Dmitry
@ 2008-11-30 21:13 ` Dmitry Chistikov
2008-11-30 21:23 ` Kharitonov A. Dmitry
2008-12-01 9:25 ` Konstantin S. Uvarin
1 sibling, 1 reply; 15+ messages in thread
From: Dmitry Chistikov @ 2008-11-30 21:13 UTC (permalink / raw)
To: ALT Linux Community general discussions
> Как убить потомка?
> В скрипте запускается блок в фон. Идентификатор получить могу по $!, но
> убивание процесса блока кода не останавливает текущую выполняемую из блока
> команду (которую и надо убить).
На всякий случай: в man ps среди способов выбора процессов есть и
вариант "по PPID". Подходит?
--
Дмитрий Чистиков,
dd1email at gmail dot com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 21:13 ` Dmitry Chistikov
@ 2008-11-30 21:23 ` Kharitonov A. Dmitry
2008-11-30 21:35 ` Dmitry Chistikov
0 siblings, 1 reply; 15+ messages in thread
From: Kharitonov A. Dmitry @ 2008-11-30 21:23 UTC (permalink / raw)
To: ALT Linux Community general discussions
Dmitry Chistikov пишет:
>> Как убить потомка?
>> В скрипте запускается блок в фон. Идентификатор получить могу по $!, но
>> убивание процесса блока кода не останавливает текущую выполняемую из блока
>> команду (которую и надо убить).
>>
>
> На всякий случай: в man ps среди способов выбора процессов есть и
> вариант "по PPID". Подходит?
>
Мне надо не посмотреть, убить.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 21:23 ` Kharitonov A. Dmitry
@ 2008-11-30 21:35 ` Dmitry Chistikov
2008-11-30 21:48 ` Kharitonov A. Dmitry
0 siblings, 1 reply; 15+ messages in thread
From: Dmitry Chistikov @ 2008-11-30 21:35 UTC (permalink / raw)
To: ALT Linux Community general discussions
> Мне надо не посмотреть, убить.
А использовать результат работы одного процесса в качестве, скажем,
аргумента для второго? Подсказка: man bash, command substitution.
--
Дмитрий Чистиков,
dd1email at gmail dot com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 21:35 ` Dmitry Chistikov
@ 2008-11-30 21:48 ` Kharitonov A. Dmitry
2008-11-30 21:51 ` Dmitry Chistikov
0 siblings, 1 reply; 15+ messages in thread
From: Kharitonov A. Dmitry @ 2008-11-30 21:48 UTC (permalink / raw)
To: ALT Linux Community general discussions
Dmitry Chistikov пишет:
>> Мне надо не посмотреть, убить.
>>
>
> А использовать результат работы одного процесса в качестве, скажем,
> аргумента для второго? Подсказка: man bash, command substitution.
>
Дмитрий, я очень не плохо пишу скрипты. Но красивое решение мне не
приходит в голову. Конечно можно сделать ps -j, а потом прыгать по
зависимостям, но это очень громоздкое и не красивое решение. Наверняка
должна существовать команда, которая прибивает процесс и все его потомки.
> --
> Дмитрий Чистиков,
> dd1email at gmail dot com
> _______________________________________________
> community mailing list
> community@lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/community
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 21:48 ` Kharitonov A. Dmitry
@ 2008-11-30 21:51 ` Dmitry Chistikov
2008-11-30 21:57 ` Kharitonov A. Dmitry
0 siblings, 1 reply; 15+ messages in thread
From: Dmitry Chistikov @ 2008-11-30 21:51 UTC (permalink / raw)
To: ALT Linux Community general discussions
> Дмитрий, я очень не плохо пишу скрипты. Но красивое решение мне не приходит
> в голову. Конечно можно сделать ps -j, а потом прыгать по зависимостям, но
> это очень громоздкое и не красивое решение. Наверняка должна существовать
> команда, которая прибивает процесс и все его потомки.
Стоп-стоп-стоп, надо все же определиться с задачей. В начальной
постановке речь шла об одном потомке, сейчас же Вы говорите о
рекурсивном обходе поддерева дерева процессов.
--
Дмитрий Чистиков,
dd1email at gmail dot com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 21:51 ` Dmitry Chistikov
@ 2008-11-30 21:57 ` Kharitonov A. Dmitry
2008-11-30 22:04 ` Dmitry Chistikov
0 siblings, 1 reply; 15+ messages in thread
From: Kharitonov A. Dmitry @ 2008-11-30 21:57 UTC (permalink / raw)
To: ALT Linux Community general discussions
Dmitry Chistikov пишет:
>> Дмитрий, я очень не плохо пишу скрипты. Но красивое решение мне не приходит
>> в голову. Конечно можно сделать ps -j, а потом прыгать по зависимостям, но
>> это очень громоздкое и не красивое решение. Наверняка должна существовать
>> команда, которая прибивает процесс и все его потомки.
>>
>
> Стоп-стоп-стоп, надо все же определиться с задачей. В начальной
> постановке речь шла об одном потомке, сейчас же Вы говорите о
> рекурсивном обходе поддерева дерева процессов.
>
А какая разница? Потомков может быть и не один. Это для упрощения
понимания задачи я привёл пример для одного потомка.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 21:57 ` Kharitonov A. Dmitry
@ 2008-11-30 22:04 ` Dmitry Chistikov
2008-11-30 22:22 ` Kharitonov A. Dmitry
0 siblings, 1 reply; 15+ messages in thread
From: Dmitry Chistikov @ 2008-11-30 22:04 UTC (permalink / raw)
To: ALT Linux Community general discussions
> А какая разница? Потомков может быть и не один. Это для упрощения понимания
> задачи я привёл пример для одного потомка.
Разница принципиальна. В одном случае достаточно выделить процессы с
заданным PPID, в другом - рассмотреть транзитивное замыкание по этой
операции. Надо определиться, чего именно (с какой конкретно целью?) мы
хотим достичь.
--
Дмитрий Чистиков,
dd1email at gmail dot com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 22:04 ` Dmitry Chistikov
@ 2008-11-30 22:22 ` Kharitonov A. Dmitry
2008-11-30 22:34 ` Dmitry Chistikov
0 siblings, 1 reply; 15+ messages in thread
From: Kharitonov A. Dmitry @ 2008-11-30 22:22 UTC (permalink / raw)
To: ALT Linux Community general discussions
Dmitry Chistikov пишет:
>> А какая разница? Потомков может быть и не один. Это для упрощения понимания
>> задачи я привёл пример для одного потомка.
>>
>
> Разница принципиальна. В одном случае достаточно выделить процессы с
> заданным PPID, в другом - рассмотреть транзитивное замыкание по этой
> операции. Надо определиться, чего именно (с какой конкретно целью?) мы
> хотим достичь.
>
При падении модемного соединения хочется прибить wget(ы), чтобы они не
плодились в памяти. Такая конкретная цель вас устроит. killall не подходит.
Пока с вами болтал уже нашёл pkill -P
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 22:22 ` Kharitonov A. Dmitry
@ 2008-11-30 22:34 ` Dmitry Chistikov
2008-11-30 22:41 ` Kharitonov A. Dmitry
0 siblings, 1 reply; 15+ messages in thread
From: Dmitry Chistikov @ 2008-11-30 22:34 UTC (permalink / raw)
To: ALT Linux Community general discussions
> Пока с вами болтал уже нашёл pkill -P
...который никакого поддерева не обходит, а делает в точности то, что
сделал бы указанный в первом же ответе ps в паре с обыкновенным kill.
Вопрос: чем же Вам так не понравился мой вариант?
--
Дмитрий Чистиков,
dd1email at gmail dot com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 22:34 ` Dmitry Chistikov
@ 2008-11-30 22:41 ` Kharitonov A. Dmitry
2008-11-30 22:56 ` Dmitry Chistikov
0 siblings, 1 reply; 15+ messages in thread
From: Kharitonov A. Dmitry @ 2008-11-30 22:41 UTC (permalink / raw)
To: ALT Linux Community general discussions
Dmitry Chistikov пишет:
>> Пока с вами болтал уже нашёл pkill -P
>>
>
> ...который никакого поддерева не обходит, а делает в точности то, что
> сделал бы указанный в первом же ответе ps в паре с обыкновенным kill.
> Вопрос: чем же Вам так не понравился мой вариант?
>
Это красивое решение. Вы мне предлагали сделать цикл с while или for,
ps, grep, sed или cut. А тут одна команда.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 22:41 ` Kharitonov A. Dmitry
@ 2008-11-30 22:56 ` Dmitry Chistikov
2008-11-30 23:37 ` Kharitonov A. Dmitry
0 siblings, 1 reply; 15+ messages in thread
From: Dmitry Chistikov @ 2008-11-30 22:56 UTC (permalink / raw)
To: ALT Linux Community general discussions
> Это красивое решение. Вы мне предлагали сделать цикл с while или for, ps,
> grep, sed или cut. А тут одна команда.
Нет-нет, что Вы, какие циклы. Мое решение:
kill `ps -o pid= --ppid 1150`
или
ps -o pid= --ppid 1150 | xargs kill
Я предполагал, что если Вы уже неплохо пишете скрипты, то должны быть
знакомы с command substitution, а потому воспринял слова о
зависимостях в смысле необходимости обойти целое поддерево дерева
процессов. Тем не менее, открыть для себя эту возможность Shell'а и, в
качестве некоторой альтернативы, утилиту xargs никогда не поздно!
Да, на всякий случай предложу идею по поводу wget'ов: не убивать их, а
останавливать (а после восстановления соединения - продолжать;
возможно, Вы уже так делаете?).
--
Дмитрий Чистиков,
dd1email at gmail dot com
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 22:56 ` Dmitry Chistikov
@ 2008-11-30 23:37 ` Kharitonov A. Dmitry
0 siblings, 0 replies; 15+ messages in thread
From: Kharitonov A. Dmitry @ 2008-11-30 23:37 UTC (permalink / raw)
To: ALT Linux Community general discussions
Dmitry Chistikov пишет:
>> Это красивое решение. Вы мне предлагали сделать цикл с while или for, ps,
>> grep, sed или cut. А тут одна команда.
>>
>
> Нет-нет, что Вы, какие циклы. Мое решение:
>
> kill `ps -o pid= --ppid 1150`
>
> или
>
> ps -o pid= --ppid 1150 | xargs kill
>
> Я предполагал, что если Вы уже неплохо пишете скрипты, то должны быть
> знакомы с command substitution, а потому воспринял слова о
> зависимостях в смысле необходимости обойти целое поддерево дерева
> процессов. Тем не менее, открыть для себя эту возможность Shell'а и, в
> качестве некоторой альтернативы, утилиту xargs никогда не поздно!
>
Если вы знали ответ, то сообщили бы сразу ответ: ps -o pid= --ppid, с
экономили бы своё время и моё.
Спасибо с ключем -о я экспериментировал, но до связки с --ppid не догадался.
kill `ps -o pid= --ppid 1150` работает не так, как мне хотелось бы. Почему-то убивает не всех. pkill убивает
В другом месте примерно такая модель
{ sleep 100; }& { sleep 100; }& { while true; do sleep 10; echo hello1; done; }& { sleep 100; echo hello2; } & ps -j
Здесь придётся писать скрипт.
> Да, на всякий случай предложу идею по поводу wget'ов: не убивать их, а
> останавливать (а после восстановления соединения - продолжать;
> возможно, Вы уже так делаете?).
>
Считываемые данные замораживаются только на момент передачи. Продолжать
с момента разрыва не получится.
Спасибо за помощь.
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-11-30 20:53 [Comm] Как убить потомка? Kharitonov A. Dmitry
2008-11-30 21:13 ` Dmitry Chistikov
@ 2008-12-01 9:25 ` Konstantin S. Uvarin
2008-12-01 13:52 ` Kharitonov A. Dmitry
1 sibling, 1 reply; 15+ messages in thread
From: Konstantin S. Uvarin @ 2008-12-01 9:25 UTC (permalink / raw)
To: ALT Linux Community general discussions
On Sunday 30 November 2008 23:53:01 Kharitonov A. Dmitry wrote:
> Как убить потомка?
> В скрипте запускается блок в фон. Идентификатор получить могу по $!, но
> убивание процесса блока кода не останавливает текущую выполняемую из
> блока команду (которую и надо убить).
Кажется, в данном случае правильное решение -- убить _группу_ процессов:
kill -TERM -$!
--
Konstantin S. Uvarin
"I love deadlines. I love the whooshing noise they make
as they go by" -- Douglas Adams
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Comm] Как убить потомка?
2008-12-01 9:25 ` Konstantin S. Uvarin
@ 2008-12-01 13:52 ` Kharitonov A. Dmitry
0 siblings, 0 replies; 15+ messages in thread
From: Kharitonov A. Dmitry @ 2008-12-01 13:52 UTC (permalink / raw)
To: ALT Linux Community general discussions
Konstantin S. Uvarin пишет:
> On Sunday 30 November 2008 23:53:01 Kharitonov A. Dmitry wrote:
>
>> Как убить потомка?
>> В скрипте запускается блок в фон. Идентификатор получить могу по $!, но
>> убивание процесса блока кода не останавливает текущую выполняемую из
>> блока команду (которую и надо убить).
>>
>
> Кажется, в данном случае правильное решение -- убить _группу_ процессов:
>
> kill -TERM -$!
>
Спасибо. То же не всех потомков убивает.
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2008-12-01 13:52 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-11-30 20:53 [Comm] Как убить потомка? Kharitonov A. Dmitry
2008-11-30 21:13 ` Dmitry Chistikov
2008-11-30 21:23 ` Kharitonov A. Dmitry
2008-11-30 21:35 ` Dmitry Chistikov
2008-11-30 21:48 ` Kharitonov A. Dmitry
2008-11-30 21:51 ` Dmitry Chistikov
2008-11-30 21:57 ` Kharitonov A. Dmitry
2008-11-30 22:04 ` Dmitry Chistikov
2008-11-30 22:22 ` Kharitonov A. Dmitry
2008-11-30 22:34 ` Dmitry Chistikov
2008-11-30 22:41 ` Kharitonov A. Dmitry
2008-11-30 22:56 ` Dmitry Chistikov
2008-11-30 23:37 ` Kharitonov A. Dmitry
2008-12-01 9:25 ` Konstantin S. Uvarin
2008-12-01 13:52 ` Kharitonov A. Dmitry
ALT Linux Community general discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
public-inbox-index community
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.community
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git