이 경우 파이프보다 프로세스 교체가 빠른 이유는 무엇입니까? [복사]

이 경우 파이프보다 프로세스 교체가 빠른 이유는 무엇입니까? [복사]

이유를 알고 싶어요

ls -1 | 
while read file; do 
     echo $file; tail -n 100 $file > >(sleep 1 && cat > $file)
done  

비교하다

ls -1 | 
while read file; do 
    echo $file; tail -n 100 $file | (sleep 1 && cat > $file)
done   

?

디렉토리에 100개의 파일이 있는 경우:

  • 두 번째 명령을 처리하는 데 거의 100초가 걸립니다.
  • 첫 번째 명령은 거의 즉시 처리됩니다.

답변1

파이프를 사용할 때 쉘은 파이프의 각 명령을 동시에 실행하고 다음 명령을 실행하기 전에 모든 명령이 완료될 때까지 기다립니다. 이것은문서:

파이프라인이 비동기식으로 실행되지 않는 경우(참조목록), 쉘은 파이프라인의 모든 명령이 완료될 때까지 기다립니다.

위에서 파이프라인의 비동기 실행을 언급할 때 이는 전체 파이프라인을 백그라운드에서 실행하는 것을 의미합니다 &.

프로세스 대체를 사용하면 쉘은 프로세스가 완료될 때까지 기다리지 않습니다. 이것문서그냥 말해:

프로세스목록입력 또는 출력이 파일 이름으로 표시되어 비동기식으로 실행됩니다.

관련 정보