공유메모리 ID가 다른데도 공유메모리 주소가 같나요?
글쓴이: rain / 작성시간: 화, 2004/07/13 - 7:45오전
x@Nxxxx:~$ ps -e --forest | grep dae 3610 pts/0 00:00:00 | \_ dae 3611 pts/0 00:00:00 | \_ dae (A1) 3614 pts/0 00:00:00 | | \_ dae (B1) 3612 pts/0 00:00:00 | \_ dae (A2) 3613 pts/0 00:00:00 | \_ dae (B2) x@Nxxxx:~$ ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 851970 root 644 110592 7 dest 0x00000000 983043 root 644 790528 2 dest 0x00000000 917508 root 644 110592 2 dest 0x00000000 950277 root 644 110592 2 dest 0x00000000 1015814 root 644 110592 3 dest 0x00000000 1179655 root 644 106496 2 dest 0x00000000 3473416 x 600 2056 4 0x00000000 3506185 x 600 2056 4
dae라는 프로그램을 짜서 돌려보면 위와 같은 결과과 나옵니다.
제가 궁금한것은 두가진데요....
공유 메모리 세그먼트 정보에서 shmid가 3473416(A1과 B1의 공유메모리)와
3506185(A2와 B2의 공유메모리)이
shmat()을 호출하여 리턴된 주소값이 같습니다.
프로세스의 특정영역을 차지해서 실제로 다르지만 값만 같게 나오는 건지
아니면 제가 프로그램을 잘못 짠건지 궁금합니다. A1/B1, A2/B2 각각 서로 다른 메세지를 주고 받으면 잘 동작하거든요.
그리고 또 궁금한 점은 공유 메모리가 첫번째 자식과 두번째 자식 끼리만 공유하게 했거든요.
그런데 ipcs -m의 정보에서 nattach가 2가 나와야 할거 같은데 4
가 나오네요.
아시는 분 조언 좀 부탁드립니다.
그리고 한가지 더...^^a
위와 같이 fork를 했을 때 프로그램을 종료하면서 공유메모리를 제거하고
싶은데 어떻게 처리해야 하나요?
SIGTERM을 처리해봤는데
$kill [R의 pid]
이렇게 하니까 부모만 죽고..
$killall dae로 하면 다 죽긴 죽는데 정상적으로 처리가 되는 건지...
보통 이러한 경우에 어떻게 각 프로세스들을 안전하게 종료시키는지 궁금합니다.
Forums:
세마포어ID와 공유메모리는 상관없습니다.그리고 위와같이 잡혔다면 실제
세마포어ID와 공유메모리는 상관없습니다.
그리고 위와같이 잡혔다면 실제로 공유메모리는 다른영역으로 잡히겠죠..
프로세스포크후 이중으로공유메모리를열고 있지 않은가 확인해보세요..
----------------------------------------------------------------------------
공유 메모리 ID를 세마포어 ID로 잘못 썼네요....ㅡㅡa
그럼 nattach가 4가 나오는 것이 제대로 된건 아니라는 말씀이시죠?
세상에서 가장 이해하기 힘든 것은 내 자신이 그것을 이해할 수 있다는 것이다.
- 알베르트 아인슈타인 -
그렇죠.
그렇죠.
----------------------------------------------------------------------------
댓글 달기