/ proc에 의해 현재 세마포어를 실행하는 프로세스를 얻는 방법?


16

현재 세마포어를 실행하는 프로세스를 얻는 방법이 궁금합니다 /proc. SysVIPC 하위 디렉토리에 의해 가능하다고 생각하지만이 명령을 사용하는 방법을 모르겠습니다.

우분투 12.10


1
에서 /proc/PID/maps프로세스의 메모리 매핑을 볼 수 있으며 POSIX 세마포어가에 첨부 된 파일로 표시됩니다 /dev/shm. 그래도 SysV 세마포어에 대해서는 확실하지 않습니다.
lgeorget

@lgeorget와 본인은 POSIX와 SysV 세마포어가 실제로 /proc/PID/maps주어진 PID 파일에 표시된다는 것을 확인했습니다 .
slm

그러나 분명히 공유 메모리 조각은 항목으로 표시 /dev/shm되며 세마포어와 구별 할 수 없습니다 (영리한 이름이있는 경우 제외).
lgeorget

답변:


21

세마포어와 공유 메모리를 다루는 유일한 경험은 명령을 사용하는 것입니다 ipcs. 자세한 내용 은 ipcs 매뉴얼 페이지 를 참조하십시오.

이 명령은 세마포어가있는 프로세스를 보여줍니다.

$ ipcs -s

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x4d114854 65536      saml       600        8         

semid known을 사용하면 세마포어가있는 PID에 대한 추가 정보를 쿼리 할 수 ​​있습니다 (8-nsems 열이 있음).

$ ipcs -s -i 65536

Semaphore Array semid=65536
uid=500  gid=501     cuid=500    cgid=501
mode=0600, access_perms=0600
nsems = 8
otime = Sun May 12 14:44:53 2013  
ctime = Wed May  8 22:12:15 2013  
semnum     value      ncount     zcount     pid       
0          1          0          0          0         
1          1          0          0          0         
2          1          0          0          2265      
3          1          0          0          2265      
4          1          0          0          0         
5          1          0          0          0         
6          1          0          0          4390      
7          1          0          0          4390 

pid 열은 이러한 프로세스입니다. 파일 시스템 ps을 사용하여 찾거나 /proc파일 시스템 을 검색 할 수 있습니다 /proc/<pid>.

예를 들면 다음과 같습니다.

$ more /proc/2265/cmdline 
mono

POSIX 및 SystemV

@lgeorget가 남긴 주석을 작성하여 PID 2265의 /proc/2265/map내용을 파헤 쳐서 다음 /dev/shm참조를 찾았습니다 .

$ grep shm /proc/2265/maps 
7fa38e7f6000-7fa38ebdf000 rw-s 00000000 00:11 18517                      /dev/shm/mono-shared-500-shared_fileshare-grinchy-Linux-x86_64-40-12-0
7fa38f0ca000-7fa38f0cb000 rw-s 00000000 00:11 18137                      /dev/shm/mono.2265
7fa3967be000-7fa3967d3000 rw-s 00000000 00:11 18516                      /dev/shm/mono-shared-500-shared_data-grinchy-Linux-x86_64-328-12-0

내가 아는 한, System V 세마포어 (만있는 것 semget(2)) 만 표시 ipcs -s되므로 POSIX 세마포어 (와 함께있는 것 sem_open(2))를 사용하는 경우 다른 방법을 사용해야합니다.
lgeorget

sem_open (2) 버라이어티를 리턴 할 터미널 명령을 알고 있습니까? 그냥 궁금해서 세마포어에 대해 내가 아는 모든 것은 8-) 위의 답변에 있습니다.
slm

아니, 그게 문제 야 ;) ipcs맨 페이지에서 "Linux ipcs 유틸리티는 POSIX ipcs 유틸리티와 완전히 호환되지 않습니다." 그래서 나는 그들이 POSIX IPC에 대한 무언가를 생각조차하지 못했습니다. ipcs:) 의 향후 릴리스 일 수 있습니다.
lgeorget

의 내용 map은 모두 세마포어의 다양한 생각입니다. 맞습니까?
slm

나는 그렇게 생각한다. 어떤 방법 으로든 세마포어는 프로세스 메모리의 어딘가에 부착되어야합니다. 그러나 SysV 세마포어가 의사 파일 시스템에서도 생성되었는지 확신 할 수 없었습니다 /dev/shm. 이제 답이 있습니다. :)
lgeorget '12
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.