2014-04-14 2 views
2

파이프 판독기가 fd [1]을 닫는 것을 잊어 버리거나 파이프 작성자가 fd [0]을 닫는 것을 잊어 버리면 무엇이 잘못 될 수 있습니까?왜 파이프를 닫으시겠습니까?

+1

Darkdust와 Prabhu가 말한 모든 것 + 당신은 영원히 반복 할 수 있습니다 : 당신이 파이프에서 읽는다고 상상해보십시오, 작가는 끝내지 만 글쓰기 끝은 여전히 ​​열려 있습니다. 어떻게됩니까? 답 : 쓰기에 사용할 수있는 디스크립터가 여전히 있으므로, 결코 올 수없는 더 많은 바이트를 읽으려는 영원을 기다리게 할 것입니다 (시도 해보세요, 설명하기보다 쉽습니다 :) – loreb

답변

1

파일 핸들러가 누출됩니다 (파일 디스크립터가 열려있는 프로세스가 실행중인 한). 가장 나쁜 일은 파이프가있는 경우 파일 설명자 핸들이 부족한 것입니다.

보통 사용자 당 유용한 제한이 있습니다 (시스템에 유용한 사용자 당 제한이있는 경우에는 맞지 않을지라도) 사용자 당 소프트 한도 및 하드 한도 (ulimit 참조) 및 시스템 전체 한도가 있습니다. 파일 기술자 핸들이 부족하면 새 프로세스를 시작할 수 없거나 다른 실행중인 프로세스가 올바르게 작동하지 않는 것처럼 이상한 일이 발생합니다.

대개의 경우, 대부분의 경우 두 개의 프로세스와 하나의 파이프가 있으므로 걱정하지 않아도되므로 누수가 큰 문제가되지는 않습니다. 여전히 리소스를 확보하기 위해 더 이상 필요하지 않은 파일 핸들을 정말로 닫고 싶습니다.

0

주어진 프로세스에 대해 리소스가 무한대로 실행되지 않습니다. 프로세스가 생성 할 수있는 소켓 수는 얼마입니까? 프로세스가 다시 새 FD를 요청하면 사용 후 FD를 닫지 못하면 메모리 누수와 비슷한 문제가 발생할 수 있습니다.

허용되는 열린 파일의 수를 확인하십시오. 가까운 서술자를 만들 수 있습니다. 당신은 곧 그것을 다 써 버려야합니다.

관련 문제