shmget()
그림과 같이 생성된 공유 메모리를 사용하면 어떤 일이 일어나는지 알고 싶습니다.http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/shm/example-2.html프로세스가 종료되거나 종료되면? 해당 영역이 해제되고 있습니까, 아니면 계속 존재합니까?
답변1
문제를 처리하는 방법을 아는 것은 응용 프로그램 작성자의 몫입니다.
많은 애플리케이션은 다음과 같이 작성됩니다.
shmctl(id, IPC_RMID, 0);
공유 메모리 세그먼트 사용을 중지한 후.
이 경우 프로그램이 예기치 않게 종료되면(예: 코어 덤프 발생) 메모리 세그먼트가 유지됩니다.
그러나 메모리 세그먼트를 연결한 후 프로그램이 shmctl(id, IPC_RMID, 0);
직접 호출되면 커널은 모든 유형의 프로그램 종료에 필요한 관리 작업을 수행합니다.
답변2
지속되며 명시적으로 제거해야 합니다.shmctl IPC_RMID
세그먼트를 폐기 대상으로 표시합니다. 세그먼트는 실제로 마지막 프로세스가 분리한 후에만 파괴됩니다. 호출자는 세그먼트의 소유자 또는 생성자이거나 권한이 있어야 합니다.