ps 출력에서 ​​N일 전의 프로세스 목록을 얻는 방법

ps 출력에서 ​​N일 전의 프로세스 목록을 얻는 방법

ps30일보다 오래된 프로세스만 표시하기 위해 명령 출력에서 ​​날짜 목록을 얻으려면 어떻게 해야 합니까 ?

내 목표는 이러한 프로세스를 종료하는 것입니다. 명령을 통해 쉽게 이 작업을 수행할 수 있습니다 killall.

예를 들어killall -u user --older-than 1M

하지만 작동하지 않는 오래된 버전의 명령이 있었기 --older-than때문에 다른 방법을 찾아야 했습니다.

제가 고려하고 있는 한 가지는 프로세스 목록을 kill 명령에 전달하는 것인데, 30일 이상 된 프로세스만 가져오는 방법을 모르겠습니다.

그런 것이 있다면:

ps --no-header -u username --sort=start_time -o user,pid,lstart | #get all processes beyond 30 days old | while read -r pid; do kill $pid; done

편집: procps 버전 3.2.8을 사용하고 있습니다.

답변1

etimes상대적으로 최신 버전의 procps를 사용하면 초를 경과 시간으로 사용할 수 있습니다 .

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 호환 시스템에서 작동해야 합니다.)

관련 정보