ps
30일보다 오래된 프로세스만 표시하기 위해 명령 출력에서 날짜 목록을 얻으려면 어떻게 해야 합니까 ?
내 목표는 이러한 프로세스를 종료하는 것입니다. 명령을 통해 쉽게 이 작업을 수행할 수 있습니다 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 호환 시스템에서 작동해야 합니다.)