2012-12-18 3 views
3

shmget, shmatshmctl을 각각 사용하여 공유 메모리 세그먼트를 가져 와서 프로세스 주소 공간에 첨부하고 제거하십시오. 이 분리되어 하나 개의 프로세스에System V 공유 메모리 세그먼트를 완전히 파괴하십시오

shmctl(id, IPC_RMID, ...) 

를 사용하여 제거 요청을받은 경우에도 프로세스가 여전히 공유 메모리 세그먼트를 사용할 수 있는지

이 궁금입니다.

나는 그 사람 페이지에서 정보를 얻을 수 없습니다입니다 :

IPC_RMID 마크 세그먼트가 파괴 될 수 있습니다. 세그먼트는 실제로 마지막 프로세스가 연결을 해제 한 후에 만 ​​삭제됩니다 (연결된 구조 shmid_dsshm_nattch 구성원이 0 일 때). 호출자는 소유자 또는 작성자이거나 권한이 있어야합니다. 세그먼트를 파기하도록 표시 한 경우 IPC_STAT으로 검색 한 관련 데이터 구조의 필드의 (비표준) SHM_DEST 플래그가 설정됩니다.

+4

여전히 사용할 수 있다고하더라도 세그먼트를 사용하는 동안 다른 프로세스가 분리되지 않으므로 파기하지 않는다는 것을 어떻게 알 수 있습니까? –

+0

@ FrédéricHamidi 귀하의 의견을 이해하지 못합니다. 대답이 '예'라는 뜻입니까? 설명해 주시겠습니까? –

+0

파괴를 요청하는 프로세스가 세그먼트를 이후에 분리하지 않으면 대답은 예이지만 질문에서 이미 알고있는 것으로 보입니다. 그래서 나는 당신이 파괴와 분리를 요청한 후에'shmat()'에 의해 매핑 된 주소를 여전히 사용할 수 있는지 알고 싶다고 생각했다. 따라서, 내 의견. –

답변

1

Linux에서는 공유 메모리 세그먼트가 이미 삭제 된 것으로 표시된 경우에도 공유 메모리 세그먼트를 연결할 수 있습니다. 그러나 POSIX.1-2001에서는이 동작을 지정하지 않으며 다른 많은 구현에서는이 동작을 지원하지 않습니다.

관련 문제