* [Comm] Убивание процесса со всеми его дочками
@ 2012-01-30 15:50 Vladimir Karpinsky
2012-01-30 17:26 ` Anton Protopopov
` (2 more replies)
0 siblings, 3 replies; 17+ messages in thread
From: Vladimir Karpinsky @ 2012-01-30 15:50 UTC (permalink / raw)
To: ALT Linux Community general discussions
Здравствуйте!
Надо убить скрипт со всеми вызываемыми из него подпроцессами, они могут
быть работающими, спящими, висящими. Использую pkill -P. На тестах всё
работает, но не на все случаи жизни удаётся придумать тест. Можно/нужно ли
использовать ещё ключи на случай спящих-висящих? Про "-9" прочитал, что
плохо, проверка подтвердила --- убивается только ppid, дальше не
обрабатывается. Или надо вообще по-другому?
--
С уважением,
Владимир.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 15:50 [Comm] Убивание процесса со всеми его дочками Vladimir Karpinsky
@ 2012-01-30 17:26 ` Anton Protopopov
2012-01-30 18:01 ` Vladimir Karpinsky
2012-01-30 17:31 ` Vladimir Karpinsky
2012-01-30 17:35 ` Dmitry Chistikov
2 siblings, 1 reply; 17+ messages in thread
From: Anton Protopopov @ 2012-01-30 17:26 UTC (permalink / raw)
To: Vladimir Karpinsky, ALT Linux Community general discussions
30 января 2012 г. 19:50 пользователь Vladimir Karpinsky
<vkarpinsky@mail.ru> написал:
> Здравствуйте!
>
> Надо убить скрипт со всеми вызываемыми из него подпроцессами, они могут быть
> работающими, спящими, висящими. Использую pkill -P. На тестах всё работает,
> но не на все случаи жизни удаётся придумать тест. Можно/нужно ли
> использовать ещё ключи на случай спящих-висящих? Про "-9" прочитал, что
> плохо, проверка подтвердила --- убивается только ppid, дальше не
> обрабатывается. Или надо вообще по-другому?
Если у процесса дети имеются только в первом поколении, то попробуйте
выполнить следующие команды:
# kill -s STOP $pid
# pkill -9 -P $pid
# kill -9 $pid
где $pid - это PID родителя. Первая команда остановит процесс $pid,
чтобы он больше не размножался, вторая - убьет всех его детей,
третья - убьет его самого (во сне).
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 17:26 ` Anton Protopopov
@ 2012-01-30 18:01 ` Vladimir Karpinsky
2012-01-30 18:23 ` Dmitry Chistikov
0 siblings, 1 reply; 17+ messages in thread
From: Vladimir Karpinsky @ 2012-01-30 18:01 UTC (permalink / raw)
To: ALT Linux Community general discussions
30.01.2012 21:26, Anton Protopopov пишет:
> 30 января 2012 г. 19:50 пользователь Vladimir Karpinsky
> Если у процесса дети имеются только в первом поколении, то попробуйте
> выполнить следующие команды:
> # kill -s STOP $pid
> # pkill -9 -P $pid
> # kill -9 $pid
> где $pid - это PID родителя. Первая команда остановит процесс $pid,
> чтобы он больше не размножался, вторая - убьет всех его детей,
> третья - убьет его самого (во сне).
Внуки тоже есть, и правнуки:
$ ps -axf
...
17244 pts/5 S 0:00 | \_ /bin/bash /home/karp/bin/get_data
17272 pts/5 S 0:00 | | \_ /bin/bash
/home/karp/bin/remdisk
17284 pts/5 S 0:00 | | \_ rsync -aqz --no-p --no-g
--chmod=u=rw,g...
17296 pts/5 S 0:00 | | \_ rsync -aqz --no-p
--no-g --chmod=u=...
...
Внучатым процессом в данном случае выступает rsync, он ещё порождает свой
подпроцесс. Таким образом не получается убить ни его, ни его подпроцесс. А
есть ли возможность всё дерево вычислить? Можно этот вывод погрепать,
поавкать и поседить, но тут не просто, тем болле, что аналогичных процессов
м.б. больше одного. Я точно знаю ppid, могу знать pid дочернего процесса, а
дальше уже трудно.
--
С уважением,
Владимир.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 18:01 ` Vladimir Karpinsky
@ 2012-01-30 18:23 ` Dmitry Chistikov
2012-01-30 18:36 ` Vladimir Karpinsky
0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Chistikov @ 2012-01-30 18:23 UTC (permalink / raw)
To: ALT Linux Community general discussions
Vladimir Karpinsky, Jan. 30, 2012, 22:01 +0400:
> А есть ли возможность всё дерево вычислить?
Я же Вам написал: попробуйте по PGID.
См., например, ps -eHo pid,pgid,cmd (далее либо kill с отрицательным
числом вместо PID, либо pkill -g).
--
Дмитрий Чистиков
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 18:23 ` Dmitry Chistikov
@ 2012-01-30 18:36 ` Vladimir Karpinsky
2012-01-30 19:05 ` Dmitry Chistikov
2012-01-31 8:00 ` Vladimir Karpinsky
0 siblings, 2 replies; 17+ messages in thread
From: Vladimir Karpinsky @ 2012-01-30 18:36 UTC (permalink / raw)
To: ALT Linux Community general discussions
30.01.2012 22:23, Dmitry Chistikov пишет:
> Vladimir Karpinsky, Jan. 30, 2012, 22:01 +0400:
>> А есть ли возможность всё дерево вычислить?
>
> Я же Вам написал: попробуйте по PGID.
Я едва успел узнать что такое PGID :-)
> См., например, ps -eHo pid,pgid,cmd (далее либо kill с отрицательным
> числом вместо PID,
Эту фразу я пока не осознал.
> либо pkill -g).
А, вот, это работает, спасибо.
--
С уважением,
Владимир.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 18:36 ` Vladimir Karpinsky
@ 2012-01-30 19:05 ` Dmitry Chistikov
2012-01-30 19:22 ` Vladimir Karpinsky
2012-01-31 8:00 ` Vladimir Karpinsky
1 sibling, 1 reply; 17+ messages in thread
From: Dmitry Chistikov @ 2012-01-30 19:05 UTC (permalink / raw)
To: ALT Linux Community general discussions
Vladimir Karpinsky, Jan. 30, 2012, 22:36 +0400:
> Я едва успел узнать что такое PGID :-)
А, OK =)
> > См., например, ps -eHo pid,pgid,cmd (далее либо kill с отрицательным
> > числом вместо PID,
>
> Эту фразу я пока не осознал.
$ man kill | grep -B2 negative
SIGNAL may be a signal name like `HUP', or a signal number like `1', or
the exit status of a process terminated by a signal. PID is an inte‐
ger; if negative it identifies a process group.
> > либо pkill -g).
>
> А, вот, это работает, спасибо.
Всегда пожалуйста!
--
Дмитрий Чистиков
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 19:05 ` Dmitry Chistikov
@ 2012-01-30 19:22 ` Vladimir Karpinsky
2012-01-30 20:34 ` Dmitry Chistikov
0 siblings, 1 reply; 17+ messages in thread
From: Vladimir Karpinsky @ 2012-01-30 19:22 UTC (permalink / raw)
To: community
30.01.2012 23:05, Dmitry Chistikov пишет:
> $ man kill | grep -B2 negative
> SIGNAL may be a signal name like `HUP', or a signal number like `1', or
> the exit status of a process terminated by a signal. PID is an inte‐
> ger; if negative it identifies a process group.
Правильно ли я понимаю:
kill -9 12345 убивает процесс номер 12345.
kill -9 -12345 убивает группу процессов с pgid=12345, т.е фактически
синоним pkill -g 12345?
--
С уважением,
Владимир.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 19:22 ` Vladimir Karpinsky
@ 2012-01-30 20:34 ` Dmitry Chistikov
0 siblings, 0 replies; 17+ messages in thread
From: Dmitry Chistikov @ 2012-01-30 20:34 UTC (permalink / raw)
To: ALT Linux Community general discussions
Vladimir Karpinsky, Jan. 30, 2012, 23:22 +0400:
> Правильно ли я понимаю:
>
> kill -9 12345 убивает процесс номер 12345.
> kill -9 -12345 убивает группу процессов с pgid=12345, т.е фактически
> синоним pkill -g 12345?
Да.
(Я, правда, так и не понял, зачем вам SIGKILL и почему не хватает SIGTERM.)
Небольшая тонкость: эти команды, скорее всего, вызовут не тот kill,
который в $PATH и про который я процитировал руководство:
$ type kill
kill is a shell builtin
См. также (наверное, в первую очередь) info kill и разные маны на тему
того же слова kill (у меня их аж пять штук, не считая всяких killall,
killpg и прочих). Что интересно, в том мане, который kill [builtins] (1) -
bash built-in commands, про отрицательные значения параметра PID
не сказано, но, насколько я понимаю, никто их оттуда не откручивал.
--
Дмитрий Чистиков
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 18:36 ` Vladimir Karpinsky
2012-01-30 19:05 ` Dmitry Chistikov
@ 2012-01-31 8:00 ` Vladimir Karpinsky
2012-01-31 8:52 ` Dmitry Chistikov
1 sibling, 1 reply; 17+ messages in thread
From: Vladimir Karpinsky @ 2012-01-31 8:00 UTC (permalink / raw)
To: community
30.01.2012 22:36, Vladimir Karpinsky пишет:
>> либо pkill -g).
>
> А, вот, это работает, спасибо.
Но не везде.
p6 --- pkill (procps version 3.2.8):
$ ps -eHo pid,pgid,cmd | grep 14840
14840 14840 /bin/bash /home/karp/bin/get_data
14862 14840 ping 5.86.210.67 -q -c5 -w10
$ pkill -g 14840
Ура, все убиты.
Но! для 4.0 --- pkill (procps version 3.2.5):
$ ps -eHo pid,pgid,cmd | grep 27319
27319 27319 /bin/bash /home/karp/bin/get_data
27340 27319 ping 5.86.210.67 -q -c5 -w10
$ pkill -g 27319
pkill: No matching criteria specified
Usage: pkill [-SIGNAL] [-fvx] [-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]
[-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] [PATTERN]
То ли руки и глаза замёрзли и где-то опечатка, то ли что-то изменилось.
--
С уважением,
Владимир.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-31 8:00 ` Vladimir Karpinsky
@ 2012-01-31 8:52 ` Dmitry Chistikov
2012-01-31 9:44 ` Vladimir Karpinsky
0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Chistikov @ 2012-01-31 8:52 UTC (permalink / raw)
To: ALT Linux Community general discussions
[-- Attachment #1: Type: text/plain, Size: 1622 bytes --]
Vladimir Karpinsky, Jan. 31, 2012, 12:00 +0400:
> Но! для 4.0 --- pkill (procps version 3.2.5):
> $ ps -eHo pid,pgid,cmd | grep 27319
> 27319 27319 /bin/bash /home/karp/bin/get_data
> 27340 27319 ping 5.86.210.67 -q -c5 -w10
>
> $ pkill -g 27319
> pkill: No matching criteria specified
> Usage: pkill [-SIGNAL] [-fvx] [-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]
> [-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] [PATTERN]
Насколько я вижу, это бага в procps.
Сравните:
3.2.5-alt7: http://git.altlinux.org/gears/p/procps.git?p=procps.git;a=blob;f=procps/pgrep.c;h=cf6ced95464864957fe98be998dad67149059ecb;hb=fe6442d4ad66cb30e095e743b94c448f7d5b2857#l538
3.2.8-alt1: http://git.altlinux.org/gears/p/procps.git?p=procps.git;a=blob;f=procps/pgrep.c;h=7ab63ea6d8c7b23e7a298b45cdab8d5dc1a5e6d5;hb=5268d4e01a739a6c48fe180d7c98b17172340d7a#l626
В старой версии -g не учитывается в подсчете критериев выбора,
в результате чего pkill полагает, что таковых не указано.
Согласно
http://git.altlinux.org/gears/p/procps.git?p=procps.git;a=history;f=procps/pgrep.c
и
http://git.altlinux.org/gears/p/procps.git?p=procps.git;a=commitdiff;h=76b8c1dcd63ad56be6a8dccf3f506fea44acd5ab ,
исправление появилось где-то между v3.2.5 и v3.2.7 (точнее, между
procps-3.2.6 и procps-3.2.7; см., например, "pgrep/pkill: g is criteria
(PLD Linux, patch found in locked filing cabinet)" в NEWS).
Если я правильно представляю Вашу задачу, то в качестве обхода можно
задать дополнительно что-нибудь вроде -U username.
Альтернатива: прикладываю патч, который должен решать эту проблему.
--
Дмитрий Чистиков
[-- Attachment #2: procps-3.2.5-alt-pgrep-pgid.patch --]
[-- Type: text/plain, Size: 366 bytes --]
diff --git a/procps/pgrep.c b/procps/pgrep.c
index cf6ced9..2fe5986 100644
--- a/procps/pgrep.c
+++ b/procps/pgrep.c
@@ -538,8 +538,9 @@ parse_opts (int argc, char **argv)
case 'g':
opt_pgrp = split_list (optarg, conv_pgrp);
if (opt_pgrp == NULL)
usage (opt);
+ ++criteria_count;
break;
// case 'i':
// opt_insensitive = 1;
// break;
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-31 8:52 ` Dmitry Chistikov
@ 2012-01-31 9:44 ` Vladimir Karpinsky
2012-01-31 10:00 ` Vladimir Karpinsky
2012-01-31 10:27 ` Dmitry Chistikov
0 siblings, 2 replies; 17+ messages in thread
From: Vladimir Karpinsky @ 2012-01-31 9:44 UTC (permalink / raw)
To: community
31.01.2012 12:52, Dmitry Chistikov пишет:
> Альтернатива: прикладываю патч, который должен решать эту проблему.
Что-то у меня не получается: скачал и установил srpm пакет, положил патч, в
SOURCE к остальным, воткнул между patch31 и patch100 под номером 99, но при
сборке он не учитывается. Может там в шапке что-то не так. Смотрю другие
патчи, там по-другому.
Например:
$ head RPM/SOURCES/procps-3.2.5-alt-sysctl-silent.patch
diff -urk.orig procps-3.2.5.orig/sysctl.8 procps-3.2.5/sysctl.8
--- procps-3.2.5.orig/sysctl.8 2004-07-30 01:42:03 +0000
+++ procps-3.2.5/sysctl.8 2005-08-24 16:57:50 +0000
@@ -12,9 +12,9 @@
--
С уважением,
Владимир.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-31 9:44 ` Vladimir Karpinsky
@ 2012-01-31 10:00 ` Vladimir Karpinsky
2012-01-31 10:27 ` Dmitry Chistikov
1 sibling, 0 replies; 17+ messages in thread
From: Vladimir Karpinsky @ 2012-01-31 10:00 UTC (permalink / raw)
To: community
31.01.2012 13:44, Vladimir Karpinsky пишет:
> Что-то у меня не получается:
Залез руками и дописал недостающую строку ++criteria_count. Хотелось бы
понять почему патч не прошёл...
Теперь работает. Спасибо!
--
С уважением,
Владимир.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-31 9:44 ` Vladimir Karpinsky
2012-01-31 10:00 ` Vladimir Karpinsky
@ 2012-01-31 10:27 ` Dmitry Chistikov
2012-01-31 10:58 ` Vladimir Karpinsky
1 sibling, 1 reply; 17+ messages in thread
From: Dmitry Chistikov @ 2012-01-31 10:27 UTC (permalink / raw)
To: ALT Linux Community general discussions
Vladimir Karpinsky, Jan. 31, 2012, 14:00 +0400:
> Залез руками и дописал недостающую строку ++criteria_count. [...]
> Теперь работает. Спасибо!
Ура!
Можно повесить багу на procps в 4.0.
Честно говоря, я ставил задачу просто и явно выписать само изменение.
Для сборки нужно не только добавить патч в список "заплаток"
(PatchN: filename), но и не забыть в %prep его приложить с подходящим
значением strip (см. patch(1); %patchN -pM). Если все равно не будет
получаться, смотрите (и показывайте) журнал сборки.
--
Дмитрий Чистиков
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-31 10:27 ` Dmitry Chistikov
@ 2012-01-31 10:58 ` Vladimir Karpinsky
2012-01-31 11:18 ` Dmitry Chistikov
0 siblings, 1 reply; 17+ messages in thread
From: Vladimir Karpinsky @ 2012-01-31 10:58 UTC (permalink / raw)
To: community
31.01.2012 14:27, Dmitry Chistikov пишет:
> Vladimir Karpinsky, Jan. 31, 2012, 14:00 +0400:
>> Залез руками и дописал недостающую строку ++criteria_count. [...]
>> Теперь работает. Спасибо!
>
> Ура!
>
> Можно повесить багу на procps в 4.0.
#26880
> Честно говоря, я ставил задачу просто и явно выписать само изменение.
> Для сборки нужно не только добавить патч в список "заплаток"
> (PatchN: filename), но и не забыть в %prep его приложить с подходящим
> значением strip (см. patch(1); %patchN -pM). Если все равно не будет
> получаться, смотрите (и показывайте) журнал сборки.
Так получилось. Честно признаться в тонкости strip не вдавался --- p1 не
получилось, поставил p2, откатил назад исправленное руками и всё собралось,
после переустановки --- отработало штатно.
--
С уважением,
Владимир.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-31 10:58 ` Vladimir Karpinsky
@ 2012-01-31 11:18 ` Dmitry Chistikov
0 siblings, 0 replies; 17+ messages in thread
From: Dmitry Chistikov @ 2012-01-31 11:18 UTC (permalink / raw)
To: ALT Linux Community general discussions
Vladimir Karpinsky, Jan. 31, 2012, 14:58 +0400:
> Так получилось. Честно признаться в тонкости strip не вдавался --- p1 не
> получилось, поставил p2, откатил назад исправленное руками и всё собралось,
> после переустановки --- отработало штатно.
-pM отрезает от указанного пути наименьший префикс с M слэшами (/).
--
Дмитрий Чистиков
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 15:50 [Comm] Убивание процесса со всеми его дочками Vladimir Karpinsky
2012-01-30 17:26 ` Anton Protopopov
@ 2012-01-30 17:31 ` Vladimir Karpinsky
2012-01-30 17:35 ` Dmitry Chistikov
2 siblings, 0 replies; 17+ messages in thread
From: Vladimir Karpinsky @ 2012-01-30 17:31 UTC (permalink / raw)
To: community
30.01.2012 19:50, Vladimir Karpinsky пишет:
> Надо убить скрипт со всеми вызываемыми из него подпроцессами, они могут
> быть работающими, спящими, висящими. Использую pkill -P. На тестах всё работает
Ни фига не работает! Извините.
М.б. с другого бока зайти --- выяснить все дочерние процессы и убивать
оптом, но как их всех со всеми их под-под-процессами переписать?
--
С уважением,
Владимир.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [Comm] Убивание процесса со всеми его дочками
2012-01-30 15:50 [Comm] Убивание процесса со всеми его дочками Vladimir Karpinsky
2012-01-30 17:26 ` Anton Protopopov
2012-01-30 17:31 ` Vladimir Karpinsky
@ 2012-01-30 17:35 ` Dmitry Chistikov
2 siblings, 0 replies; 17+ messages in thread
From: Dmitry Chistikov @ 2012-01-30 17:35 UTC (permalink / raw)
To: ALT Linux Community general discussions
Vladimir Karpinsky, Jan. 30, 2012, 19:50 +0400:
> Надо убить скрипт со всеми вызываемыми из него подпроцессами, они могут
> быть работающими, спящими, висящими. Использую pkill -P.
А внучата Вас не интересуют?
В ряде разумных случаев можно попробовать по pgid.
--
Дмитрий Чистиков
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2012-01-31 11:18 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-30 15:50 [Comm] Убивание процесса со всеми его дочками Vladimir Karpinsky
2012-01-30 17:26 ` Anton Protopopov
2012-01-30 18:01 ` Vladimir Karpinsky
2012-01-30 18:23 ` Dmitry Chistikov
2012-01-30 18:36 ` Vladimir Karpinsky
2012-01-30 19:05 ` Dmitry Chistikov
2012-01-30 19:22 ` Vladimir Karpinsky
2012-01-30 20:34 ` Dmitry Chistikov
2012-01-31 8:00 ` Vladimir Karpinsky
2012-01-31 8:52 ` Dmitry Chistikov
2012-01-31 9:44 ` Vladimir Karpinsky
2012-01-31 10:00 ` Vladimir Karpinsky
2012-01-31 10:27 ` Dmitry Chistikov
2012-01-31 10:58 ` Vladimir Karpinsky
2012-01-31 11:18 ` Dmitry Chistikov
2012-01-30 17:31 ` Vladimir Karpinsky
2012-01-30 17:35 ` Dmitry Chistikov
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