С помощью этой команды я могу найти все процессы для wget
:
ps -aef | grep -i wget
Но мне нужна команда или скрипт, который может предоставить мне процессы, которые старше одного дня, для wget
и kill
их.
Если вы имеете в виду "более 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 перебирает эти пиды и убивает каждого из них.
Вы можете попробовать отформатировать вывод ps:
ps -ae -o start,pid,command
Если процесс старше 24 часов, в первом столбце отображается дата, а не время.