for 루프를 x번만 실행하는 방법

for 루프를 x번만 실행하는 방법

항상 루프를 계속 실행하는 대신 여러 프로세스를 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잘릴 수도 있지만 일반적으로 그렇지 않을 가능성은 낮습니다 .)argsps -o argsps -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

관련 정보