Jak uzyskać procesy aktualnie uruchomione semafory przez / proc?


16

Zastanawiam się, jak uzyskać przez procesy obecnie uruchomione semafory /proc? Wydaje mi się, że jest to możliwe dzięki podkatalogowi SysVIPC, ale nie wiem, jak korzystać z tych poleceń.

Ubuntu 12.10


1
W /proc/PID/maps, możesz zobaczyć mapowanie pamięci procesu, a semafory POSIX pojawiają się jako załączone pliki /dev/shm. Nie jestem jednak pewien co do semaforów SysV.
lgeorget

@lgeorget i ja potwierdziliśmy, że zarówno semafory POSIX, jak i SysV faktycznie pojawiają się w /proc/PID/mapspliku dla danego PID.
slm

Ale najwyraźniej fragmenty pamięci współużytkowanej pojawiają się również jako wpisy /dev/shmi są dość nie do odróżnienia od semaforów (chyba że mają sprytne nazwy).
lgeorget

Odpowiedzi:


22

Moje jedyne doświadczenie w radzeniu sobie z semaforami i pamięcią współdzieloną polega na użyciu polecenia ipcs. Więcej informacji znajdziesz na stronie podręcznika ipcs .

To polecenie pokazuje, jakie procesy mają semafory:

$ ipcs -s

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

Przy znanym semid możemy zapytać o dodatkowe informacje o PID, które mają semafory (zauważ, że jest 8 - kolumna 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 

Kolumna pid to te procesy. Można też wyszukać je za pomocą pslub przejrzeć /procsystemu plików, /proc/<pid>.

Na przykład:

$ more /proc/2265/cmdline 
mono

POSIX i SystemV

Opierając się na komentarzu pozostawionym przez @lgeorget, wkopałem się w /proc/2265/mapzawartość mojego PID 2265 i znalazłem następujące /dev/shmodniesienia:

$ 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

O ile wiem, tylko semafory Systemu V (te, które otrzymujesz semget(2)) pojawiają się, ipcs -swięc jeśli używasz semaforów POSIX (tych, które otrzymujesz sem_open(2)), musisz użyć innej metody.
lgeorget

Znasz jakieś polecenia terminala, które zwrócą odmianę sem_open (2)? Po prostu ciekawy. Wszystko, co wiem o semaforach, znajduje się w odpowiedzi powyżej 8-).
slm

Nie, to jest problem. ;) Jak ipcsmówi strona podręcznika: „Narzędzie Linux ipcs nie jest w pełni kompatybilne z narzędziem POSIX ipcs”. więc nie jestem pewien, czy nawet wymyślili coś dla POSIX IPC. Może przyszłe wydanie ipcs:).
lgeorget

treść mapobu odmian semaforów jest uważana, prawda?
slm

Chyba tak. Tak czy inaczej semafory muszą być dołączone gdzieś w pamięci procesu. Ale nie byłem pewien, czy semafory SysV zostały również utworzone w pseudo-systemie plików /dev/shm. Teraz mamy odpowiedź. :)
lgeorget
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.