2010-11-26 2 views
1

유닉스 플랫폼에있는 Im.자식 프로세스의 mem 누출은 어떨까요

memleak이있는 프로세스의 메모리는 프로세스 종료시 정리됩니다.

아이가 양육 한 과정, 즉 아이가 memleak을 가지고있는 과정은 어떻습니까? 자식 프로세스 종료시 유출 된 메모리가 정리됩니까? 아니면이 메모리가 이제 부모 프로세스에 집중 될 것입니다.

감사

답변

8

자식 프로세스에 의해 할당 된 메모리는 자식 프로세스의 가상 주소 공간이 아닌 부모의 존재합니다. 자식 프로세스가 종료되거나 새로운 프로그램 이미지로 바뀌 자마자 exec 계열의 기능 중 하나를 통해 해제됩니다.

이는 공통 가상 주소 공간을 공유하는 스레드와는 달리 스레드가 종료 된 후에도 새 스레드에서 할당이 지속되고 다른 스레드가 사용할 수있는 상태를 유지합니다.

+0

+1하지만 'vfork' 및'clone '과 같은 일부 호출은 공유 주소 공간을 생성한다는 사실을 언급해야합니다. – casablanca

+0

나는'vfork'의 결과를 공유 메모리 공간이라고 부르지 않을 것입니다. 'vfork'와'_exit' 또는'exec' 패밀리 중 하나 사이의 안전한 함수의 짧은 목록을 호출하면'vfork'는 정의되지 않은 동작을합니다. 확실히'vfork'' 자식으로부터'malloc '을 호출하면 메모리 손상을 일으킬 수 있습니다. 당신이 시스템 쓰레드 구현의 구현 자이고 시스템'malloc' 구현에 맞는 동기화 메카니즘을 추가 할 자유가 없다면, 공유 주소 공간을 가진'clone '에 일반적으로 적용됩니다. –

+0

그리고 정의되지 않은 동작을 강조하기 위해'vfork', IIRC를 가지고있는 가장 최근의 스펙에 따르면'vfork'가 단순히'fork'를 호출 할 수 있도록 완전히 허용되었습니다 (현재 POSIX는'vfork'를 가지고 있지 않습니다). 'vfork' 후에 공유 메모리 공간을 사용하는 것에 의존하지 않습니다. –

관련 문제