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ń.
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:
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:
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ź. :)
/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./proc/PID/maps
pliku dla danego PID./dev/shm
i są dość nie do odróżnienia od semaforów (chyba że mają sprytne nazwy).Odpowiedzi:
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:
Przy znanym semid możemy zapytać o dodatkowe informacje o PID, które mają semafory (zauważ, że jest 8 - kolumna nsems):
Kolumna pid to te procesy. Można też wyszukać je za pomocą
ps
lub przejrzeć/proc
systemu plików,/proc/<pid>
.Na przykład:
POSIX i SystemV
Opierając się na komentarzu pozostawionym przez @lgeorget, wkopałem się w
/proc/2265/map
zawartość mojego PID 2265 i znalazłem następujące/dev/shm
odniesienia:źródło
semget(2)
) pojawiają się,ipcs -s
więc jeśli używasz semaforów POSIX (tych, które otrzymujeszsem_open(2)
), musisz użyć innej metody.ipcs
mó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 wydanieipcs
:).map
obu odmian semaforów jest uważana, prawda?/dev/shm
. Teraz mamy odpowiedź. :)