[Comm] Убивание процесса со всеми его дочками
Dmitry Chistikov
dd1email на gmail.com
Вт Янв 31 12:52:03 MSK 2012
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.
Альтернатива: прикладываю патч, который должен решать эту проблему.
--
Дмитрий Чистиков
----------- следующая часть -----------
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;
Подробная информация о списке рассылки community