프로세스를 나열할 때 ps auxf
일부 프로세스가 중단되어 수동으로 종료해야 하는 경우가 종종 있습니다. 명령 하나로 이 작업을 어떻게 수행할 수 있나요?
ps 결과 예:
$ ps auxf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
tommass 7971 62.3 1.1 316428 45844 ? R Aug08 29133:14 xxxxxxxx
tommass 7978 0.0 2.6 455072 105964 ? S Aug08 8:56 xxxxxxxx
tommass 7979 0.0 2.6 454436 105360 ? S Aug08 8:57 xxxxxxxx
tommass 15034 67.8 1.1 51828 43760 ? R Aug14 26411:38 xxxxxxxx
tommass 7982 0.0 2.6 455012 105904 ? S Aug08 8:28 xxxxxxxx
- 특정 사용자 "tommass"가 1시간 이상 소요하는 모든 프로세스를 종료하는 방법
- STAT "R"을 사용하여 해당 사용자 "tommass"의 모든 프로세스를 종료하는 방법
답변1
이 문제를 해결하는 방법에는 여러 가지가 있습니다.
pam_limits.so를 사용하고 사용자 프로세스에 대한 CPU 시간 제한을 설정하십시오
/etc/secrity/limits.conf
. 이로 인해 CPU 시간 할당량을 초과하는 프로세스가 XCPU 신호를 수신하게 되어 XCPU 신호를 구체적으로 차단/무시/처리하지 않으면 종료됩니다.사용자동 Nice 데몬(
and
데비안/우분투 패키지). 너무 많은 CPU 시간을 사용하는 프로세스를 다시 시작하거나 종료합니다.ps(1)
관심 있는 필드(예: CPU 시간, 사용자 이름, pid)만 인쇄하도록 형식 문자열 매개변수로 호출된 스크립트를 해킹한 다음 쉘스크립트를 사용하여 해당 출력(예: )을 처리할 수 있어야grep -f file-with-one-username-per-line | while read cputime username pid; do [ "$cputime" -gt max-cpu-time ] && kill -9 $pid; done
하지만 이는 재발명입니다. 자동 나이스 데몬.
답변2
1)에 답하려면 먼저
ps -u tomass -o pid,time
(상황에 따라 시간(CPU 시간), etime(경과 시간)을 선택하실 수 있습니다.)
답변 2) 시도해 보세요
ps -u tomass -o state,pid | awk '$1 == "R" { printf "kill %d\n",$2 ;}' | ksh
실행 중인 프로세스를 정말로 종료하시겠습니까?