간단한 파이프라인이 있다고 가정해 보겠습니다.
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
종료되기 전에 신호가 수신됩니다.a
a
PIPE
b
파이프에 쓰기를 시도하지 않으면 a
완료될 때까지 계속 실행됩니다.