2011-04-14 3 views
30

공유 메모리 세그먼트에 연결된 프로세스는 어떻게 결정합니까?linux에서 공유 메모리 세그먼트에 연결된 프로세스를 나열하는 방법은 무엇입니까?

[email protected]:/home/awagner$ ipcs -m 

------ Shared Memory Segments -------- 
key  shmid  owner  perms  bytes  nattch  status  
0x00000000 0   root  777  102400  1      
0x00000000 32769  root  774  96   1   dest   
0x00000000 98306  awagner 600  393216  2   dest   
0x00000000 131075  awagner 600  393216  2   dest  

즉 두 프로세스가 shmid 98306에 연결되어 있는지 어떻게 알 수 있습니까?

답변

32

표준 도구로는이 작업을 수행 할 수 없다고 생각합니다. ipcs -mp을 사용하면 의 프로세스 ID를 얻을 수 있습니다. 마지막으로 프로세스를 연결하거나 분리 할 수 ​​있지만 나는 깨닫지 못합니다. 에 연결된 프로세스는 ipcs입니다. 그들은 모두 이 부착 머물렀다 가정 두 프로세스 부착 세그먼트와

, 당신은 아마도 제작자 PID cpid으로부터 알아낼 수 마지막으로 연결된 PID lpid 두 프로세스하지만 그 이상에 확장되지 것이다 두 가지 프로세스보다 유용성이 제한됩니다.

cat /proc/sysvipc/shm 방법 것 같다 유사하게 제한하지만 아래와 같이 /proc 파일 시스템의 다른 부분과 그것을 할 수있는 방법이있다 생각 :

, 나는 모든 프로세스에 대한 procfs지도에 grep를 얻을 내가 않는 경우 cpidlpid 프로세스에 대한 행을 포함하는 항목.

예를 들어, I는 ipcs -m에서 다음 공유 메모리 세그먼트를 얻을 :

------ Shared Memory Segments -------- 
key  shmid  owner  perms  bytes  nattch  status  
0x00000000 123456  pax  600  1024  2   dest 

ipcs -mp에서부터 cpid가 3956이고 lpid는 주어진 공유 메모리 세그먼트 (123,456)에 대한 9999이다.

그런 다음 명령 grep 123456 /proc/*/maps으로, 나는 참조 :

/proc/3956/maps: blah blah blah 123456 /SYSV000000 (deleted) 
/proc/9999/maps: blah blah blah 123456 /SYSV000000 (deleted) 

그래서 가 부착 된 프로세스를 얻을 수있는 방법

. 나는 정확히 dest 상태와 (deleted) 표시기가 확실합니다. 최종 분리가 발생하면 작성자가 파기를 표시했기 때문입니다. 이미 파기 된 것은 아닙니다.

따라서 "/proc/*/maps"파일을 검색하면 특정 세그먼트에 현재 연결된 PID를 찾을 수 있습니다.

+0

유닉스 의미론은 삭제를 허용합니다. te 파일/오브젝트가 아직 사용되지 않습니다. 즉, 아직 열려있는 파일을 삭제할 수 있습니다. 따라서 파일 이름은 삭제되지만 파일 객체는 여전히 존재합니다. 마지막 파일 핸들이 닫히면 더 이상 파일에 대한 참조가 없으므로 삭제됩니다. "(삭제 된)"상태의 공유 메모리 객체도 마찬가지입니다. 그것들은 여전히 ​​존재하지만 더 이상 새로운 프로세스로부터 액세스 할 수 없습니다. – hurikhan77

19

는 위의 예를 주어 - 98,306

lsof | egrep "98306|COMMAND" 
0

내가 쓴 도구라는 who_attach_shm.pl을 shmid가에 부착 된 프로세스를 찾기 위해이 정보를 얻기 위해/proc 디렉토리/[PID] /지도를 구문 분석합니다. 당신이 github

샘플 출력에서 ​​다운로드 할 수 있습니다 :

shm attach process list, group by shm key 
################################################################## 

0x2d5feab4: /home/curu/mem_dumper /home/curu/playd 
0x4e47fc6c: /home/curu/playd 
0x77da6cfe: /home/curu/mem_dumper /home/curu/playd /home/curu/scand 

################################################################## 
process shm usage 
################################################################## 
/home/curu/mem_dumper [2]: 0x2d5feab4 0x77da6cfe 
/home/curu/playd [3]: 0x2d5feab4 0x4e47fc6c 0x77da6cfe 
/home/curu/scand [1]: 0x77da6cfe 
+1

친애하는 Jacuro,이 포럼에서 해결책을 제공해주십시오. 링크의 문제점은 여러 가지 이유로 구식 일 수 있다는 것입니다. – Trinimon

+0

@ Trrinimon, 알겠습니다. 대신 스크립트를 다운로드 할 수있는 링크를 제공 할 것입니다. – jacuro

+1

-1 왜 중요한지 말한 후 답안을 제공하지 못한 것에 대한 -1 – scraimer

1

사용 IPCS를 -a : 모든 자원 [세마포어, 공유 메모리 등 여기

은 이미지의 상세 정보를 제공합니다 출력의 -

click here to open image

+0

이미지 내용을 답안에 복사 할 수 있습니다. – dakab

+0

평판 점수> 10 –

+3

이라면 평판이 필요없는 * 텍스트 * 콘텐츠를 복사 할 수 있음을 의미합니다. 텍스트 전용 콘텐츠의 스크린 샷입니다. 코드/견적 블록에 넣을 수 있습니다. – dakab

관련 문제