coprocess의 반환 값 및 반환 상태

coprocess의 반환 값 및 반환 상태

이 문장의 의미를 이해하지 못해요공동 프로세스내부에세게 때리다매뉴얼 페이지:

코프로세스는 비동기식 명령으로 생성되므로,코루틴이 명령은 항상 성공을 반환합니다. coprocess의 반환 상태는 "command"의 종료 상태입니다.

'성공'과 '성공'의 차이점은 무엇인가요?반환 값및 "성공/오류"(0/비-0)종료 상태? 어떻게 다르게 처리되는지세게 때리다? 어떻게 그들이 차이점을 깨닫게 할 수 있을까요?

답변1

명령의 종료 상태를 얻으려면 wait해당 프로세스 ID를 얻어야 합니다. 다음 예를 통해 이를 확인하고 상태 간의 차이점을 확인할 수 있습니다.

coproc mytr { tr a b; exit 2; }
rc=$? fdi=${mytr[0]} fdo=${mytr[1]} pid=$mytr_PID
echo "rc=$rc fdi=$fdi fdo=$fdo pid=$pid"
echo aaa >&$fdo
exec {fdo}>&- 
cat -v <&$fdi
wait $pid
echo $?

mytra를 b로 변환하고 eof를 읽은 후 코드 2로 종료하는 명명된 coproc을 시작합니다 . 다음 에코는 coproc 명령의 반환 코드가 0(성공을 나타냄)이며 bash가 배열을 mytr프로세스에 대한 입력 및 출력 파일 설명자로 설정했음을 보여줍니다. pid는 mytr_PIDcoprocess가 끝나면 사라지기 때문에 복사하는 변수 입니다 .

문자열 "aaa"를 coproc에 보낸 다음 구문을 사용하여 입력 fd를 닫습니다 {variable}>&-. "bbb"라는 명령의 출력을 읽고 tr프로세스가 종료될 때까지 기다립니다. 종료 코드는 wait프로세스의 종료 코드입니다. 출력은 다음과 같습니다

rc=0 fdi=63 fdo=60 pid=8137
bbb
2

참고: fdo 및 fdi는 상위 프로세스에서 볼 수 있으므로 fdo에 대한 에코는산출하위 처리하다입력하다.

관련 정보