2010-02-17 4 views
0

일부 리소스, 뮤텍스, 공유 데이터가있는 프로그램은 메모리 할당이 너무 많아서 모든 리소스가 해제되므로 충돌이 발생합니다. 어떻게 회복합니까?리눅스에서 리소스 관리

+1

Hooooooooooooooomework? –

+0

아니, 면접 질문. – Swapna

답변

1

다시 말하자면, 지금 추락 한 프로세스에서 할당 한 리소스를 어떻게 확보 할 수 있습니까? 그렇다고해서 반드시 필요하지는 않습니다.

exit (2) 프로세스가 OS에 의해 할당 된 모든 자원을 검색하는 신호로 검색되거나 죽는 경우. 이것은 커널의 일입니다.

+0

하지만 프로세스가 깨끗한 종료를 수행하지 않습니다. 이유는 운영 체제가 처음에 해제하지 않았기 때문입니까? – Swapna

+2

종료가 시스템 호출 또는 신호의 결과로 발생하는지 여부는 상관 없습니다. 동일한 커널 코드를 실행하고 동일한 정리를 수행합니다. 이것이 커널의 일이며, 커널 누수가 아니라면 커널 버그만큼이나 심각합니다. 릴리스를 철회하고 보안 경고를 게시하며 모든 종류의 응급 업데이트 히스테리를 일반적으로 실행합니다. – DigitalRoss

1

자원 획득 기능의 결과를 확인하고 처음에 확인되지 않은 오류가 발생하지 않도록 복구하십시오.

+2

현실 세계에서는 버그가 발생합니다. – leeeroy

+0

메모리 할당 시도/캐치를 사용하면 안전하게 종료 할 수 있습니다. OOM 킬러가 먼저 당신을 얻지 않는 이상. – Xorlev

+0

malloc은 Linux에서 결코 실패하지 않습니다. 리눅스는 존재하지 않는 메모리를 사용하려고 할 때 앱을 죽인다. try/catch는 도움이되지 않습니다. –

1

프로세스에 속한 모든 리소스가 정리됩니다.

유일한 예외는 sysv 공유 메모리/메시지 대기열/세마포어이며 프로세스에 의해 생성되었을 수도 있지만 소유하지는 않습니다.