그래서 아이디어는 다음과 같습니다
#declare associative array [download_url]=pid_of_download
declare -A downloads
#declare array of killed downloads
declare -a killedDownloads=()
function download() {
local url=$1
# killed downloads can be reloaded, but not successfully downloaded URL's
if [ ${downloads[${url}]} ] && [[ ! ${killedDownloads[*]} =~ ${do wnloads[${url}]} ]]; then
echo "Already download-[ing/ed] !"
else
wget -q ${url} &
downloads[${url}]=$!
fi
}
$!은 실행 wget을 명령의 프로세스 분명히 가장 최근에 실행 된 배경 명령의 ID, PID를 포함
사용자가 몇 가지 다운로드를 죽이고 싶어
, 우리 모두 다운로드 배열을 인쇄 할 수 있습니다. 인쇄하는 동안, 우리는 또한
jobs -l | grep ${downloads[$i])
에서 문자열로 얻은 상태를 표시 ... 그리고 URL이 실제로하지 살해 완성 된 알 killedDownloads를 사용할 수 있습니다.
if [[ ${killedDownloads[*]} =~ ${downloads[$i]} ]]
//set status var to killed
킬 자체 :
function stop(){
local pid=$1
if ps -p ${pid} > /dev/null; then
kill -9 ${pid}
wait ${pid} 2>/dev/null
echo "Killed downloading of ${pid}"
killedDownloads+=${pid}
else
echo "No active download with id = ${pid} exists"
fi
}
물론 당신은 등, 약간의 대화 형 루프 내에서이를 넣어 유효하지 않은 URL에 대한 검사를 추가해야합니다