다음과 같은 bash 스크립트가 있습니다.
#!/bin/bash
wget LINK1 >/dev/null 2>&1
wget LINK2 >/dev/null 2>&1
wget LINK3 >/dev/null 2>&1
wget LINK4 >/dev/null 2>&1
# ..
# ..
wget LINK4000 >/dev/null 2>&1
그러나 명령이 완료 될 때까지 각 줄을 처리 한 다음 다음 줄로 이동하는 데 시간이 많이 걸리므로 한 번에 20 줄을 처리 한 다음 다른 20 줄을 처리하려고합니다.
나는 wget LINK1 >/dev/null 2>&1 &
명령을 백그라운드로 보내고 계속 생각 했지만 여기에 4000 줄이 있습니다. 이것은 성능 문제가 있음을 의미합니다. 생각.
내가 지금 생각하고있는 한 가지 해결책은 명령 중 하나가 여전히 실행 중인지 여부를 확인하는 것입니다. 예를 들어 20 줄 이후 에이 루프를 추가 할 수 있습니다.
while [ $(ps -ef | grep KEYWORD | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
물론이 경우 줄 끝에 &를 추가해야합니다! 그러나 이것이 올바른 방법이 아니라고 생각합니다.
따라서 실제로 각 20 줄을 그룹화하고 다음 20 줄로 이동하기 전에 완료 될 때까지 기다리는 방법은 무엇입니까?이 스크립트는 동적으로 생성되므로 생성되는 동안 원하는 수학을 수행 할 수 있지만 반드시 할 필요는 없습니다. wget을 사용하십시오. 이것은 단지 예 일뿐이므로 wget과 관련된 솔루션은 나에게 도움이되지 않습니다.
wait
여기에 정답이지만, proctools를 사용하는while [ $(ps …
것이 훨씬 좋습니다 . 즉, 특정 이름을 가진 프로세스가 여전히 실행 중인지 확인해야하는 합법적 인 이유 때문입니다.while pkill -0 $KEYWORD…