По сути, мне нужно иметь возможность сканировать дерево процессов и находить процессы, которые соответствуют определенному имени и запускаются более недели назад. Когда они у меня есть, мне нужно их убить. Все процессы по-прежнему воспринимаются системой как работающие, но не используют системное время. Как правило, они всегда будут сидеть в этом состоянии.
В идеале я хотел бы найти что-то похожее, но для процессов.
Система - Debian Linux, и она будет создаваться и запускаться cron, поэтому у меня нет особых проблем с чем-то большим, но понятным.
Ответы:
Вы можете сделать это с помощью комбинации ps, awk и kill:
Предоставляет вывод в три столбца с PID процесса, прошедшим временем с момента запуска процесса и именем команды без аргументов. Прошедшее время выглядит следующим образом:
Поскольку вам нужны процессы, которые выполнялись более недели, вы должны искать строки, соответствующие этому третьему шаблону. Вы можете использовать awk для фильтрации процессов по времени выполнения и по имени команды, например так:
который напечатает pids всех команд, соответствующих 'mycommand', которые выполнялись более 7 дней. Передайте этот список в kill, и все готово:
источник
etimes
удобнееkillall --quiet --older-than 1w process_name
источник
Всю необходимую информацию можно получить
ps -ef
. Смотрите колонку «STIME». Объедините это с,grep
чтобы отсортировать процессы, которые вам нужны. В этот момент вы можете использовать,cut
чтобы получить pid всех соответствующих процессов и передать ихkill
.Пожалуйста, дайте мне знать, если вы хотите получить более подробную информацию о том, как это сделать.
источник
если вы root, чтобы избавиться от мусора (/ proc / fs proc / stat ...)
источник
Когда процесс запускается, он создает каталог в файловой системе / proc. Вы можете использовать команду find, чтобы получить каталоги старше 7 дней и завершить процессы следующим образом:
источник
find: warning: you have specified the -maxdepth option after a non-option argument -user, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
переводя -maxdepth в качестве первого вывода, он не возвращает никаких процессов, и я уверен, что многие должны соответствовать.Никто не упомянул ps-watcher здесь. Я думаю, что вы могли бы сравнить $ start_time, используя функцию elapsed2sec, но я не совсем уверен. Вот моя первая мысль:
Понятия не имею, работает ли это, но это должно стать хорошей отправной точкой.
источник