항상 루프를 계속 실행하는 대신 여러 프로세스를 X 번 종료할 수 있습니까?
for 루프를 10회 미만으로 실행하고 싶습니다.
for pid in $(ps -ef | grep "helpdax.app" | awk '{print $2}'); do kill -9 $pid; done
답변1
최대 10개의 인수 목록을 포함하는 프로세스를 종료하려면(잠재적으로 극적인 효과를 모두 포함하는 SIGKILL 신호(-9) 사용) helpdax.app
다음을 수행할 수 있습니다.
pgrep -f 'helpdax\.app' | head -n 10 | xargs kill -s KILL
또는 다음을 사용하여 ps
:
ps -Ao pid= -o args= |
awk -v n=10 '/helpdax\.app/ {print $1; if (!--n) exit}' |
xargs kill -s KILL
(일부 구현에서는 목록이 ps
잘릴 수도 있지만 일반적으로 그렇지 않을 가능성은 낮습니다 .)args
ps -o args
ps -f
귀하의 문자 그대로의 질문에 대한 답변(또는 적어도 제가 이해한 바입니다)으로 Bourne과 같은 쉘에서 초기에 루프를 종료하려면 break
특별한 내장 함수를 사용할 수 있습니다.
따라서 루프에서 10번 패스한 후 종료하려면 for
루프할 모든 요소가 아직 처리되지 않았더라도 POSIXly:
n=10
for i in ...elements...; do
...body of the loop...
[ "$((n = n - 1))" -gt 0 ] || break
done
또는 Korn과 유사한 쉘( bash
이 경우 Bourne, POSIX 및 Korn과 유사한)을 사용하십시오.
n=10
for i in ...; do
...
((--n)) || break
done