ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [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