Иногда вы можете обнаружить, что некоторые давно запущенные процессы не реагируют на запросы или потребляют слишком много системных ресурсов. В таких случаях вам может понадобиться убить эти процессы. В этой статье мы узнаем, как убить процесс, работающий дольше определенного времени.
Как завершить процесс, выполняющийся дольше определенного времени
Нам потребуется использовать несколько команд, чтобы найти и убить процесс, выполняющийся дольше определенного времени. Сначала мы убьем процесс, выполняющийся дольше 5 минут, то есть 300 секунд.
1. Список времени выполнения процесса
Сначала мы воспользуемся командой ps, чтобы получить список всех процессов с их именем, PID и временем выполнения.
1 | ps -eo comm,pid,etimes |
2. Найти долго выполняющиеся процессы
Далее мы передадим приведенный выше результат команде awk, чтобы получить только те процессы, которые выполняются более 3000 секунд. В приведенном выше выводе третий столбец - это количество секунд, в течение которых каждый процесс был запущен.
1 | ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 3000) { print $2}}' |
В приведенной выше команде awk просматривает вывод команды ps, чтобы проверить, не превышает ли значение в третьем столбце (ELAPSED) 300. Если да, то выводится 2-й столбец (PID) этого процесса.
procname - необходимо заменить на имя процесса из команды ps -eo comm,pid,etimes
к примеру, процессы apache (httpd)
3. Завершить долго работающие процессы
Теперь, когда у нас есть список PID процессов, работающих дольше заданной продолжительности, мы можем выдать команду kill, чтобы убить эти процессы.
1 | kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}') |
Аналогично, вы можете найти и убить процессы, работающие дольше 3 часов или даже 24 часов, с помощью следующих команд.
Убить процессы, работающие более 3 часов
1 | kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 10800) { print $2}}') |
Убить процессы, выполняющиеся дольше 24 часов
1 | kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 86400) { print $2}}') |
Заключение
В этой статье мы узнали, как убить процессы, запущенные дольше определенного времени в Linux. Вы можете использовать эти команды почти в каждом дистрибутиве Linux.