¿Cómo obtener procesos que actualmente ejecutan semáforos por / proc?

16

Me pregunto cómo hacer que los procesos ejecuten actualmente semáforos /proc. Supongo que es posible por el subdirectorio SysVIPC, pero no sé cómo usar estos comandos.

Ubuntu 12.10

Hanna
fuente
1
En /proc/PID/maps, puede ver la asignación de memoria de un proceso y los semáforos POSIX se muestran como archivos adjuntos /dev/shm. Sin embargo, no estoy seguro acerca de los semáforos de SysV.
lgeorget
@lgeorget y yo hemos confirmado que los semáforos POSIX y SysV aparecen de hecho en el /proc/PID/mapsarchivo para un PID determinado.
slm
Pero aparentemente, los fragmentos de memoria compartida también aparecen como entradas /dev/shmy son bastante indistinguibles de los semáforos (excepto si tienen nombres inteligentes).
lgeorget

Respuestas:

21

Mi única experiencia al tratar con semáforos y memoria compartida es a través del uso del comando ipcs. Eche un vistazo a la página de manual de ipcs para obtener más detalles.

Este comando muestra qué procesos tienen semáforos:

$ ipcs -s

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

Con el semid conocido, podemos consultar información adicional sobre los PID que tienen semáforos (tenga en cuenta que hay 8 - la columna 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 

La columna pid son estos procesos. O se puede mirar hacia arriba usando pso una mirada a través del /procsistema de archivos, /proc/<pid>.

Por ejemplo:

$ more /proc/2265/cmdline 
mono

POSIX y SystemV

Partiendo de un comentario dejado por @lgeorget, busqué en el /proc/2265/mapcontenido de mi PID 2265 y encontré las siguientes /dev/shmreferencias:

$ 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
slm
fuente
Hasta donde sé, solo se semget(2)muestran los semáforos del Sistema V (aquellos con los que se obtiene ), por ipcs -slo que si está utilizando los semáforos POSIX (con los que se obtiene sem_open(2)), debe usar otro método.
lgeorget
¿Conoce algún comando de terminal que devolverá la variedad sem_open (2)? Sólo curioso. Todo lo que sé sobre los semáforos está en la respuesta anterior 8-).
slm
No, ese es el problema. ;) Como ipcsdice la página de manual: "La utilidad ipcs de Linux no es totalmente compatible con la utilidad ipcs POSIX". así que no estoy seguro de que hayan pensado en algo para POSIX IPC. Tal vez un lanzamiento futuro de ipcs:).
lgeorget
los contenidos de mapambos son una variedad de semáforos pensados, ¿correcto?
slm
Supongo que sí. De una forma u otra, los semáforos tienen que estar unidos en algún lugar de la memoria del proceso. Pero no estaba seguro de que los semáforos SysV también se crearan en el pseudo-sistema de archivos /dev/shm. Ahora tenemos la respuesta. :)
lgeorget