공유메모리 ID가 다른데도 공유메모리 주소가 같나요?

rain의 이미지

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로 하면 다 죽긴 죽는데 정상적으로 처리가 되는 건지...
보통 이러한 경우에 어떻게 각 프로세스들을 안전하게 종료시키는지 궁금합니다.

ㅡ,.ㅡ;;의 이미지

세마포어ID와 공유메모리는 상관없습니다.
그리고 위와같이 잡혔다면 실제로 공유메모리는 다른영역으로 잡히겠죠..
프로세스포크후 이중으로공유메모리를열고 있지 않은가 확인해보세요..


----------------------------------------------------------------------------

rain의 이미지

그럼 nattach가 4가 나오는 것이 제대로 된건 아니라는 말씀이시죠?

세상에서 가장 이해하기 힘든 것은 내 자신이 그것을 이해할 수 있다는 것이다.
- 알베르트 아인슈타인 -

ㅡ,.ㅡ;;의 이미지

그렇죠.


----------------------------------------------------------------------------

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.