Bash에서 반복하는 동안 중지하는 방법

Bash에서 반복하는 동안 중지하는 방법
target=${1:-http://web1.com}
while true 
do
    for i in $(seq 10)
    do
    curl $target > /dev/null & 
done

    wait

done

저는 프로그래밍, 특히 bash의 초보자일 뿐입니다. 한 번에 10개의 HTTP 요청을 생성하여 HTTP 부하 분산을 훈련하고 싶습니다. 15000에 도달하면 요청 전송을 중지합니다.

코드는 어떻게 작성하나요? 감사해요

답변1

달성하려는 목표가 curl총 15,000번의 호출인 경우 외부 루프를 1,500번 실행하기만 하면 됩니다.

내부 루프를 10번 실행하는 것과 비슷한 방식으로 외부 루프를 1500번 실행하면 이를 달성할 수 있습니다.

target=${1:-http://web1.com}
j=0

while [ "$j" -lt 1500 ]; do

    for i in {0..9}; do
        curl "$target" >/dev/null &
    done

    wait

    j=$(( j + 1 ))
done

또는 총 호출 수를 계산하여 외부 루프를 조정하지 않고도 curl내부 루프의 실행 수를 변경하면서도 curl동일한 총 호출 수를 유지할 수 있습니다.

target=${1:-http://web1.com}
n=15000

while [ "$n" -gt 0 ]; do

    for i in {0..9}; do
        curl "$target" >/dev/null &
        n=$(( n - 1 ))
    done

    wait

done

테스트 [ "$n" -gt 0 ]진짜엄격하게 0보다 큰 한 n.

또는 n내부 루프 내부의 축소를 방지하려면 다음을 수행하세요.

target=${1:-http://web1.com}
n=15000

while [ "$n" -gt 0 ]; do

    for i in {0..9}; do
        curl "$target" >/dev/null &
    done
    n=$(( n - 10 ))

    wait

done

xargs또는 병렬로 실행될 수 있는 유틸리티가 있고 -P10개의 프로세스를 지속적으로 실행하려고 합니다 curl.

target=${1:-http://web1.com}
n=15000

yes | head -n "$n" | xargs -I {} -P 10 curl "$target" >/dev/null

이는 yes15000개의 라인을 사용 및 생성 하고 모든 라인이 소진될 때까지 항상 10개의 프로세스를 실행하는 명령 head에 공급합니다 ( 읽은 각 라인에서 하나의 프로세스가 생성됩니다 ). 결과 줄의 실제 내용은 단일 문자 이지만 삭제되고 전혀 사용되지 않습니다.xargscurlcurlheadyesy

관련 정보