Come ottenere i processi correntemente in esecuzione semafori da / proc?


16

Mi chiedo come ottenere i processi che eseguono attualmente i semafori /proc? Immagino sia possibile dalla sottodirectory SysVIPC, ma non so come usare questi comandi.

Ubuntu 12.10


1
In /proc/PID/maps, puoi vedere la mappatura della memoria di un processo e i semafori POSIX vengono visualizzati come file allegati in /dev/shm. Non sono sicuro dei semafori SysV però.
lgeorget,

@lgeorget e io stessi abbiamo confermato che sia i semafori POSIX che SysV vengono effettivamente visualizzati nel /proc/PID/mapsfile per un determinato PID.
slm

Ma a quanto pare, anche i frammenti di memoria condivisa si presentano come voci /dev/shme sono piuttosto indistinguibili dai semafori (tranne se hanno nomi intelligenti).
lgeorget,

Risposte:


21

La mia unica esperienza nella gestione di semafori e memoria condivisa è attraverso l'uso del comando ipcs. Dai un'occhiata alla pagina man di ipcs per maggiori dettagli.

Questo comando mostra quali processi hanno semafori:

$ ipcs -s

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

Con il semid noto possiamo richiedere informazioni addizionali sui PID che hanno semafori (nota che ci sono 8 - la colonna 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 colonna pid sono questi processi. Puoi cercarli usando pso sfogliando il /procfile system /proc/<pid>.

Per esempio:

$ more /proc/2265/cmdline 
mono

POSIX e SystemV

Sulla base di un commento lasciato da @lgeorget ho scavato nei contenuti del mio PID 2265 /proc/2265/mape ho trovato i seguenti /dev/shmriferimenti:

$ 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

Per quanto ne so, vengono visualizzati solo i semafori System V (quelli con cui ottieni semget(2)), ipcs -squindi se stai usando i semafori POSIX (quelli con cui ottieni sem_open(2)), devi usare un altro metodo.
lgeorget,

Conosci qualche comando terminale che restituirà la varietà sem_open (2)? Solo curioso. Tutto ciò che so sui semafori è nella risposta sopra Cool.
slm

No, questo è il problema. ;) Come ipcsdice la manpage: "L'utility ipcs Linux non è completamente compatibile con l'utility ipcs POSIX." quindi non sono sicuro che abbiano nemmeno pensato a qualcosa per POSIX IPC. Forse una versione futura di ipcs:).
lgeorget,

i contenuti di mapentrambe sono varietà di semafori pensati, giusto?
slm

Credo di si. In un modo o nell'altro, i semafori devono essere collegati da qualche parte nella memoria di processo. Ma non ero sicuro che anche i semafori SysV fossero creati nello pseudo-filesystem /dev/shm. Ora abbiamo la risposta. :)
lgeorget,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.