Мне нужна команда, чтобы убить процессы, которые были запущены по крайней мере 5 минут для данного процесса.
Мне придется выполнять эту команду каждые пять минут или около того.
Бесконечно благодарен !
(система Centos5)
kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')
где «procname» - это имя процесса, а 300 - порог времени выполнения
-9
будучи немного более дружественным к своим процессам, и добавилgrep -v defunct |
ранее,awk
как и другое, что вы можете увидетьprocname <defunct>
в своем выводе, что заставит команду awk не возвращать действительный PID. И это сломало бы команду kill.$(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print "kill "$2}}')
что это немного более плавно, но в любом случае ответ будет отличнымМожет, запустите такую длительную команду в crontab?
источник
Моя версия сценария уничтожения, использующая преимущества обоих предыдущих ответов:
Он фильтрует процесс по UID, NAME и, если время выполнения превышает лимит, убивает процессы и отправляет отчет на электронную почту. Если вам не нужно это письмо - вы можете просто прокомментировать последнюю строку.
источник
Я нашел решение на этой странице: http://www.directadmin.com/forum/showthread.php?t=26179
Сделайте пустой файл и назовите его killlongproc.sh
Скопируйте это:
Останови это в своем хрене
источник
kill -9
его, так как он не дает процессам возможности выполнить аккуратную очистку перед выходом.Существует скрипт здесь , что вы могли бы изменить , чтобы сделать то , что вы хотите.
РЕДАКТИРОВАТЬ добавил скрипт ниже
источник
etimes
из ,ps
чтобы показать вам непосредственно в истекших секунды с момента начала процесса (нет необходимости вычислять его от времени начала).ps
которые не поддерживаютetimes
(толькоetime
), это отличная альтернатива. Я только использовал это, когда главный ответ дал мне ошибку отps
Мне пришлось решить аналогичную задачу, и для этого не нужен сценарий. Для завершающих (сигнальных SIGTERM) процессов исполняемого файла "THECOMMAND":
Ограничение для текущего пользователя
-u $USER
необходимо только во избежание ненужных сообщений об ошибках, если другие пользователи также запускают «THECOMMAND». В вашем собственном пользовательском crontab вы должны ввести следующее:В системном crontab (пользователь 'root') вы добавили бы следующее:
Если вы хотите уничтожить (SIGKILL) процессы вместо их завершения (SIGTERM), явным образом отправьте сигнал SIGKILL, добавив
--signal SIGKILL
к параметрам. Пример для системного crontab:источник
Для httpd
ps eaxo pid, время, комм | хвост -n + 2 | grep 'httpd' | awk 'substr ($ 0,9,1)> 0' | awk '{print $ 1}'
источник