지난 한 시간 동안 시작된 모든 프로세스를 종료하시겠습니까?

지난 한 시간 동안 시작된 모든 프로세스를 종료하시겠습니까?

(지난 시간, 지난 날) 내 사용자 이름으로 시작된 모든 프로세스를 어떻게 종료합니까?

답변1

  1. 1시간도 채 걸리지 않은 프로세스를 찾았습니다.
  2. PID 추출
  3. PID를 죽여라

프로세스 목록:

$ ps -e -o pid,user,etimes,comm \
    | awk -v me=$USER '$2 == me && $3 <= 3600 { print }'

생산

 661162 jaroslav    3006 chrome
 667859 jaroslav    1711 chrome
 669145 jaroslav    1471 chrome
 671222 jaroslav    1016 chrome
 675278 jaroslav     270 chrome
 675578 jaroslav     207 sleep
 676094 jaroslav      91 chrome
 676102 jaroslav      91 chrome
 676528 jaroslav      11 chrome
 676529 jaroslav      11 chrome
 676553 jaroslav      11 chrome
 676602 jaroslav       3 top
 676615 jaroslav       0 ps
 676616 jaroslav       0 awk

PID 추출:

$ ps -e -o pid,user,etimes,comm \
    | awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }'

PID 종료:

 $ ps -e -o pid,user,etimes,comm \
    | awk -v me=$USER '$2 == me && $3 <= 3600 { print $1 }' \
    | xargs -rt kill

xargs에 대한 -tr 인수는 선택 사항입니다. 출력이 보고되지 않고 실행된 각 행이 보고되면 xargs를 건너뜁니다.

테스트할 수도 있으며 kill -0프로세스가 중지되지는 않지만 프로세스가 더 이상 실행되지 않으면 오류가 보고됩니다.

$ ps -e -o pid,user,etimes,comm \
    | awk -v me=$USER '$2 == me  && $3 <= 3600 { print $1 }' \
    | xargs -rt kill -0 
kill -0 661162 667859 669145 671222 675278 676602 677310 677311 677883 677893 677965 677966 677967 677968
kill: (677966): No such process
kill: (677967): No such process

이 파이프라인/스크립트는 피드백 후에 자체적으로 종료될 수 있다는 점을 인식하고(위 프로세스 목록에서 etimes=0 참고) 최근 프로세스를 무시하는 수정된 버전은 다음과 같습니다.

ps -u "$LOGNAME" -o pid,etimes,comm \
  | awk '$2 <= 3600 && $2 > 1 { print $1 }' \
  | xargs -rt kill -0

이것은 이식성이 좋지 않을 수 있지만 Linux(최소한 ubuntu 18)에서는 작동합니다. 이를 통해 이 문제를 해결하는 방법에 대한 아이디어를 얻을 수 있기를 바랍니다.

<mother-mode> awk 및 xargs 없이 ps 명령을 실행하고 먼저 kill하여 무엇이 종료되는지 확인하십시오. 루트로 실행하는 경우 주의하십시오. 시스템을 종료하거나 최근에 다시 시작한 일부 중요한 서비스를 종료할 수 있습니다. </mother-mode>

관련 정보