* [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