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

* 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

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