생산자가 퇴사해도 소비자를 살리는 방법

생산자가 퇴사해도 소비자를 살리는 방법

간단한 파이프라인이 있다고 가정해 보겠습니다.

a | b

예를 들어 로그아웃하세요 . 임의의 시간 동안 활성 상태를 유지(작업 완료 등) a할 수 있는 안정적인 방법이 있습니까 ?b

답변1

b종료로 종료되지 않습니다 a.

$ { echo hello; } | { read message; printf 'got "%s"\n' "$message"; sleep 5; echo "ok, I'm done"; }
got "hello"
ok, I'm done

여기서 a( echo hello)는 단순히 문자열을 출력하고 종료합니다. 파이프()의 오른쪽은 b문자열을 읽고 출력한 후 잠시 대기한 다음 echo종료하기 전에 마지막 작업을 수행합니다.

b종료 시 종료되는 경우 a필요한 작업을 수행할 시간이 전혀 없습니다. 유일한 것b 할 수 없다여기서 수행되는 작업은 표준 입력에서 더 많은 데이터를 읽는 것입니다( read끝에 있는 추가 데이터는 즉시 파일의 끝을 가져옵니다).


내부에다른시나리오(질문에 언급되지 않음), 표준 출력에 쓰기를 시도하고(존재하지 않는 프로세스로 이동) 종료하는 경우(기본적으로) b종료되기 전에 신호가 수신됩니다.aaPIPEb

파이프에 쓰기를 시도하지 않으면 a완료될 때까지 계속 실행됩니다.

관련 정보