Bash 스크립트에서 "cmd1 [newline] cmd2"는 "cmd1 & cmd2"와 동시에 사용됩니까?

Bash 스크립트에서 "cmd1 [newline] cmd2"는 "cmd1 & cmd2"와 동시에 사용됩니까?

다음 스크립트를 실행하세요.

#!/usr/bin/bash

while true
do
  ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post & ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done

똑같이 하세요

#!/usr/bin/bash

while true
do
  ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post 
  ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done

내 경험에 따르면 첫 번째 스크립트는 nalog두 번째 스크립트(10분 이상 후)보다 더 빠르게(몇 초 이내) 파일을 생성하므로 후자가 ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog완료될 때까지 기다려야 함을 알 수 있습니다. 이런 일은 있어서는 안 됩니다. 왜냐하면내가 지금까지 연구한 내용은두 번째 스크립트는 완료를 ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog기다리지 않고 시작되도록 설계되었습니다 ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post. 이 두 ab명령을 동시에 실행하고 싶은데 Bash에서 어떻게 이를 달성할 수 있나요?

PS 예 &, 아니오 &&. 나는 &&그것이 무엇인지 알고 있으며 여기에 적용하고 싶지 않습니다.

답변1

아니요, cmd1 [newline] cmd2전자와 같이 동시가 아닙니다 cmd1 & cmd2. 전자는 cmd1시작하기 전에 완료될 때까지 기다립니다 cmd2.

첫 번째 명령이 실행되는 동안 실행을 계속하려면 &명령을 두 줄로 분할할 때 이를 유지해야 합니다.

ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post & ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog

~이 되다

ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post &
ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog

다시 반복하기 전에 두 명령이 모두 완료되었는지 확인하려면 를 사용할 수 있습니다 wait.

다른 셸 구성도 동시성을 제공합니다. 특히 파이프( 또는 두 개의 출력 스트림을 리디렉션하는 데 사용되는 a | b일부 셸의 변형 ) 는 계속하기 전에 두 가지가 모두 완료될 때까지 실행 하고 기다립니다. 일부 쉘은 보조 프로세스도 지원합니다(참조:a |& bab다양한 쉘에서 coproc 명령을 사용하는 방법은 무엇입니까?) 및 프로세스 대체(참조:다양한 쉘에서 coproc 명령을 사용하는 방법은 무엇입니까?)을 사용하여 명령을 동시에 실행할 수 있습니다.

바라보다쉘의 제어 및 리디렉션 연산자는 무엇입니까?목록 종결자(포함 &) 및 파이프 연산자에 대한 세부정보입니다.


a¹ 보조 프로세스로 실행되는 ksh는 제외됩니다 .

관련 정보