Как я могу убить процессы, соответствующие grep старше 30 минут?

У меня есть набор процессов, которые работают параллельно.

Иногда некоторые остаются дольше, чем предполагается в сценарии:

$time_start = microtime(true)
$max_run_time = 30 * 60; // 30 minutes, measured in seconds
while ((microtime(true)-$time_start) < $max_run_time) {
// do stuff, but quit after 30 minutes
}

Я хотел бы убить старые процессы этого скрипта, которые длились более 30 минут.

Как я могу сделать столько же из командной строки?

Вот пример текущих запущенных процессов:

> ps aux | grep script.php
my_user       856 28.3  0.7 546152 234568 ?       S    11:46  88:42 php /path/to/my/script.php
my_user      4931 28.2  1.2 708176 396476 ?       R    07:03 168:06 php /path/to/my/script.php
my_user      6965 28.6  0.7 542132 230764 ?       S    11:51  88:08 php /path/to/my/script.php
my_user      8411 28.3  0.6 536944 225392 ?       S    11:47  88:27 php /path/to/my/script.php
my_user      9087 28.3  1.5 820720 509208 ?       S    06:56 171:12 php /path/to/my/script.php
my_user      9095 27.3  1.1 693496 381992 ?       S    06:56 164:59 php /path/to/my/script.php
my_user     11182 28.1  1.1 704948 393028 ?       R    06:57 169:14 php /path/to/my/script.php
my_user     12490 27.9  0.7 553700 242444 ?       S    11:35  90:32 php /path/to/my/script.php
my_user     14050 28.0  1.1 686380 374972 ?       S    06:58 168:42 php /path/to/my/script.php
my_user     14051 27.9  1.5 828872 517364 ?       S    06:58 168:14 php /path/to/my/script.php
my_user     14888 27.9  0.6 540208 228744 ?       R    11:52  85:55 php /path/to/my/script.php
my_user     16412 27.0  0.9 612436 300828 ?       S    11:48  84:01 php /path/to/my/script.php
my_user     17776 28.2  1.1 693748 382016 ?       S    06:59 169:38 php /path/to/my/script.php
my_user     21159 28.2  1.5 825944 514560 ?       R    07:00 169:02 php /path/to/my/script.php
my_user     21215 28.5  1.2 708172 396724 ?       S    07:00 171:01 php /path/to/my/script.php
my_user     23615 27.3  0.9 632712 321224 ?       S    11:24  91:36 php /path/to/my/script.php
my_user     26225 27.8  1.1 696316 384788 ?       S    07:01 166:42 php /path/to/my/script.php
my_user     31541 28.6  1.5 829628 518124 ?       S    07:02 170:46 php /path/to/my/script.php
my_user     31542 28.4  1.1 704476 393152 ?       S    07:02 170:02 php /path/to/my/script.php

Я могу убить их всех с помощью `pkill -f» php /path/to/my/script.php «

Но как я могу просто убить старых?

2

Решение

Получить список процессов с именем PROCESS_NAME которые работают более 30 минут, вы
может выдать следующее awkкоманда:

ps ax -ocmd,pid,etime | awk '/PROCESS_NAME/{split($(NF),a,":");if(a[1]>30)print}'

Чтобы получить только прогон пидсов

ps ax -ocmd,pid,etime | awk '/PROCESS_NAME/{split($(NF),a,":");if(a[1]>30)print $(NF-1)}'

Вы можете передать это xargs kill, как это:

ps ax -ocmd,pid,etime | awk '/PROCESS_NAME/{split($(NF),a,":");if(a[1]>30)print $(NF-1)}' \
| xargs kill
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]