완료 시 중단되고 RETURN 키를 눌러 종료될 때까지 기다리는 스트레스 테스트 스크립트가 병렬로 실행 중입니다. 조사한 결과 이것이 내 스크립트에만 국한된 것이 아니라 bash에서 실행되는 다양한 스크립트에 적용되며 생성된 출력 크기에 따라 다르다는 사실을 발견했습니다(적어도 내 시스템에서는 정확하게 Ubuntu).
예를 들어 다음과 같습니다.
find . &
충분한 출력이 생성되면(더 많은 출력을 위해 .. 또는 ../.. 시도) 정지하고 RETURN 키 입력을 기다립니다. 그렇지 않으면(즉, "작은" 출력이 생성되는 경우) 정지 없이 종료합니다.
내 특별한 경우에 이 기능이 불편하다고 생각하는데, 이를 해결할 수 있는 방법이 있습니까?
답변1
명령이 중단되지 않습니다. 프롬프트가 표시되지 않기 때문에 명령이 정지되었다고 생각합니다. 힌트는 거기에 있습니다. 프롬프트는 백그라운드 프로세스의 출력에 의해 푸시되므로 표시되지 않습니다. 백그라운드 프로세스의 긴 출력 후 Enter를 누르면 쉘이 빈 줄을 "실행"하고 새 프롬프트를 인쇄합니다.
다음을 시도해 보세요.
- 구현하다
find . &
- 출력이 완료될 때까지 기다리기
- 깜박이는 커서 등이 표시되지만 메시지는 표시되지 않습니다.
- 유형
echo foo
- Enter 키를 누르세요
foo
인쇄된 콘텐츠와 새로운 팁 보기
더 많은 실험:
seq 10 &
그러면 1부터 10까지의 숫자가 인쇄되고 프롬프트가 인쇄됩니다.
seq 10000 &
그러면 1부터 10000까지의 숫자가 인쇄되고 커서가 깜박이고 프롬프트가 표시되지 않습니다. 그러나 힌트가 있습니다. Enter 키를 누르면 인쇄된 내용과 새 프롬프트가 echo foo
표시됩니다 .foo
(sleep 2; seq 10) &
이 명령은 출력은 길지만 출력은 길지 않은 명령의 대기 시간을 시뮬레이션합니다. 내 시스템에서는 다음과 같은 효과가 있습니다. 첫 번째는 sleep 2
백그라운드에서 실행됩니다. 잠시 후 쉘이 프롬프트를 인쇄합니다. 그리고 2초 후에 seq 10
백그라운드에서 실행됩니다. 그러면 10줄이 인쇄되고 프롬프트가 위로 올라갑니다. 그러면 배경 작업이 완료됩니다.
따라서 백그라운드 작업이 항상 완료되고 항상 프롬프트가 표시되지만 항상 프롬프트가 표시되는 것은 아닙니다. 백그라운드 작업이 빠르게 완료되면 셸은 마지막에 표시되는 프롬프트를 인쇄합니다. 백그라운드 작업이 출력을 인쇄하는 데 시간이 걸릴 때 쉘은 프롬프트를 인쇄했지만 해당 프롬프트는 더 이상 표시되지 않도록 위로 밀려납니다.
더 많은 실험:
시도 seq 10000 &
하거나 다른 큰 숫자를 입력하면 출력 끝에 힌트가 표시되지 않습니다. 이제 이 숫자의 절반을 시도해 보세요. 이 예에서는 seq 5000 &
. 프롬프트를 보셨나요? 이렇게 하려면 더 큰 숫자를 시도해 보세요. 예를 들어 seq 7500 &
. 메시지가 표시되지 않으면 더 작은 숫자를 시도해 보세요. 예를 들어 seq 2500 &
. 프롬프트가 몇 행만 푸시된 것을 확인할 때까지 이 작업을 계속하세요. 여기에 있는 내용은 실제로는경쟁 조건백그라운드 프로세스와 셸 프로세스 사이.