С помощью этой команды я могу найти все процессы для wget:

ps -aef | grep -i wget

Но мне нужна команда или скрипт, который может предоставить мне процессы, которые старше одного дня, для wget и kill их.

2 ответа2

0

Если вы имеете в виду "более 24 часов", когда говорите, что старше суток, это должно сработать.

for wgetpid in $(ps -eo "%t %p %c" | grep "^ *[0-9][0-9]*-" | grep wget | cut -d ' ' -f 2);
do
    kill -9 $wgetpid
done

Команда ps -eo выводит время (в формате [[dd-] чч:] мм: сс), pid и имя процесса.

Если процесс выполнялся менее 24 часов, времени нет.

Первая команда grep сопоставляет строки, начинающиеся с (^) нуля или более пробелов (процессы, работающие в течение 1-9 дней, имеют отступ, если есть какие-либо процессы, работающие в течение 10 или более дней), числа, нуля или более чисел ( для 2+ цифр числа дней), затем -, который указывает, что предыдущее число было днями.

Второй grep фильтрует это до процессов wget.

Команда cut захватывает только 2-е поле (pid).

Затем цикл for перебирает эти пиды и убивает каждого из них.

0

Вы можете попробовать отформатировать вывод ps:

ps -ae -o start,pid,command

Если процесс старше 24 часов, в первом столбце отображается дата, а не время.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .