백그라운드 프로세스 파이프 입력

백그라운드 프로세스 파이프 입력

화면에 "aaa"를 표시하려면:

(1)$: echo aaa | cat                 ... works OK
(2)$: echo aaa | ( cat )             ... works OK
(3)$: echo aaa | ( cat & )           ... NOT working
(4)$: ( echo aaa & ) | cat           ... works OK 
(5)$: echo aaa | ( cat <&0 & )       ... works ok in BASH (but not in SH)
(6)$: echo aaa | ( cat <&3 & ) 3<&0  ... works ok in BASH and SH

(3)과 (4)의 결론 -> 분리된 프로세스에는 여전히 제어, 사용, 리디렉션할 수 있는 연결 출력이 있지만 입력은 없습니다.

내 질문은: 누구든지 이해합니까?(5) 작동 원리 및 작동 원리???

... "<&0"은 "0<&0"의 줄임말입니다. 0을 0으로 리디렉션하는 것이 해결책인 이유와 프로세스 입력 분리 뒤에 정확히 무슨 일이 벌어지고 있는지를 설명합니다. 서브쉘은 문제가 되지 않습니다. (...) 대신 중괄호 {...}를 사용하면 동일한 결과가 나옵니다.

...질문 2: "분리된 프로세스에 입력 제공"에 대한 더 나은 솔루션이 라인 (6)보다 있습니까?

답변1

예,POSIX 요구 사항에 따르면, 백그라운드에서 시작된 명령의 표준 입력이 &에서 리디렉션됩니다 /dev/null.

정말

{ cmd <&3 3<&- & } 3<&0

이 문제를 해결하는 가장 확실한 방법입니다.

그러나 파이프라인의 일부가 백그라운드에서 실행되는 이유는 확실하지 않습니다.

관련 정보