![이 경우 파이프보다 프로세스 교체가 빠른 이유는 무엇입니까? [복사]](https://linux55.com/image/130483/%EC%9D%B4%20%EA%B2%BD%EC%9A%B0%20%ED%8C%8C%EC%9D%B4%ED%94%84%EB%B3%B4%EB%8B%A4%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EA%B5%90%EC%B2%B4%EA%B0%80%20%EB%B9%A0%EB%A5%B8%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
이유를 알고 싶어요
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
파이프를 사용할 때 쉘은 파이프의 각 명령을 동시에 실행하고 다음 명령을 실행하기 전에 모든 명령이 완료될 때까지 기다립니다. 이것은문서:
파이프라인이 비동기식으로 실행되지 않는 경우(참조목록), 쉘은 파이프라인의 모든 명령이 완료될 때까지 기다립니다.
위에서 파이프라인의 비동기 실행을 언급할 때 이는 전체 파이프라인을 백그라운드에서 실행하는 것을 의미합니다 &
.
프로세스 대체를 사용하면 쉘은 프로세스가 완료될 때까지 기다리지 않습니다. 이것문서그냥 말해:
프로세스목록입력 또는 출력이 파일 이름으로 표시되어 비동기식으로 실행됩니다.