프로세스 대체를 사용하는 것과 동일합니까?

프로세스 대체를 사용하는 것과 동일합니까?

프로세스 교체 사용 여부

command1 <(command2)

동등하다

command2 > ~/myfile
command1 ~myfile

?

위의 두 개를 서로 교체할 수 있나요?

명령 대체를 사용하면 command1및 항상 동시에 실행되는 반면, "교체"에서는 실행이 완료된 후에만 실행됩니까?command2command1command2

그렇다면 이 차이로 인해 둘이 동일하지 않고 어떤 경우에는 항상 상호 교환이 가능하지 않습니까?

감사해요.

답변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

실행하는데 시간이 꽤 걸립니다. 이러한 유형의 차이는 한 형식을 다른 형식으로 대체하는 것이 부적절하다는 것을 의미할 수 있습니다.

관련 정보