프로세스 교체 사용 여부
command1 <(command2)
동등하다
command2 > ~/myfile
command1 ~myfile
?
위의 두 개를 서로 교체할 수 있나요?
명령 대체를 사용하면 command1
및 항상 동시에 실행되는 반면, "교체"에서는 실행이 완료된 후에만 실행됩니까?command2
command1
command2
그렇다면 이 차이로 인해 둘이 동일하지 않고 어떤 경우에는 항상 상호 교환이 가능하지 않습니까?
감사해요.
답변1
이것은프로세스 교체.
귀하가 제공하는 두 가지 양식의 최종 결과는 본질적으로 동일해야 합니다.
- 지적했듯이 프로세스 교체는 동시에 두 개의 프로세스를 실행합니다.
- 두 번째 양식은 파일 시스템의 파일을 사용하므로 파일을 저장할 공간이 필요합니다(이상적으로는 나중에 삭제하는 것이 좋습니다).
기술적으로 프로세스 교체와 관련된 프로세스 간 I/O는 파일이 아닌 파이프처럼 동작합니다. (그러나 이는 구현 세부 사항일 가능성이 높습니다.)
올바르게 작성된 프로그램은 차이점을 보여서는 안 됩니다.결과예를 들어 동시에 실행되기 때문입니다.
tail -n 1 <(seq 1 10000000)
수동으로 시도하는 동안 시퀀스의 마지막 숫자를 올바르게 표시합니다.
seq 1 10000000 > blah &
tail -n 1 blah
tail
런타임에 저장된 마지막 행이 표시되고 완료될 때까지 기다리지 않기 때문에 실패합니다 seq
. 이 경우 두 번째 양식은 올바르게 대기합니다.
하지만 겉으로 보기에는 차이가 보입니다행동. 예를 들어,
head -n 1 <(seq 1 1000000000)
즉시 완료되지만( seq
파이프라인 동작으로 인해)
seq 1 1000000000 > blah
head -n 1 blah
실행하는데 시간이 꽤 걸립니다. 이러한 유형의 차이는 한 형식을 다른 형식으로 대체하는 것이 부적절하다는 것을 의미할 수 있습니다.