Как получить список процессов за N дней назад из вывода ps

В глобусе оболочки (, также известном как шаблоны имен файлов ), .не имеет специального значения, *означает ноль или более символов, а ?означает любой одиночный символ.

Вы хотите исключить точку, за которой следует как минимум один символ, а затем любое количество символов. Так что используйте:

grep -r --exclude-dir='.?*' string.
0
19.08.2019, 17:58
1 ответ

В относительно недавних версиях procps вы можете использовать etimesв качестве прошедшего времени в секундах:

ps -Ao etimes= -o pid= |
  awk -v n=30 '$1 >= n*86400 {print $2}' |
  xargs -r kill

(здесь предполагается GNU xargsдля его -rопции)

Или:

ps -Ao etimes= -o pid= |
  awk -v n=30 '$1 >= n*86400 {print "kill", $2}' |
  sh

В более старых версиях вы можете вернуться кetime:

LC_ALL=C ps -Ao etime= -o pid= |
  awk -v n=30 '$1 ~ /^[[:digit:]]+-/ && 0+$1 >= n {print "kill", $2}' |
  sh

(этот синтаксис соответствует POSIX и должен работать во всех системах, совместимых с POSIX ).

2
28.01.2020, 02:29

Теги

Похожие вопросы