Wie bekomme ich Prozesse, die aktuell Semaphoren von / proc ausführen?


16

Ich frage mich, wie Prozesse, auf denen derzeit Semaphoren ausgeführt werden, abgerufen werden können /proc. Ich vermute, es ist durch SysVIPC-Unterverzeichnis möglich. Aber ich weiß nicht, wie man diese Befehle verwendet.

Ubuntu 12.10


1
In /proc/PID/mapskönnen Sie die Speicherzuordnung eines Prozesses sehen und POSIX-Semaphore werden als angehängte Dateien in angezeigt /dev/shm. Bei SysV-Semaphoren bin ich mir allerdings nicht sicher.
— Lgeorget

@lgeorget und ich haben bestätigt, dass sowohl POSIX- als auch SysV-Semaphore /proc/PID/mapsfür eine bestimmte PID tatsächlich in der Datei angezeigt werden .
— slm

Aber anscheinend werden Fragmente des gemeinsamen Speichers auch als Einträge in angezeigt /dev/shmund sind von Semaphoren kaum zu unterscheiden (außer wenn sie clevere Namen haben).
— 12.

Antworten:


21

Meine einzige Erfahrung im Umgang mit Semaphoren und Shared Memory ist die Verwendung des Befehls ipcs. Weitere Informationen finden Sie auf der ipcs-Manpage .

Dieser Befehl zeigt Ihnen, welche Prozesse Semaphoren haben:

$ ipcs -s

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

Mit dem bekannten Semid können wir zusätzliche Informationen zu den PIDs mit Semaphoren abfragen (beachten Sie, dass es 8 - die Spalte nsems - gibt):

$ 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 

Die PID-Spalte sind diese Prozesse. Sie können sie entweder mit psoder über das /procDateisystem suchen /proc/<pid>.

Beispielsweise:

$ more /proc/2265/cmdline 
mono

POSIX & SystemV

Aufbauend auf einem Kommentar von @lgeorget habe ich mich mit dem /proc/2265/mapInhalt meiner PID 2265 befasst und die folgenden /dev/shmReferenzen gefunden:

$ 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

Soweit ich weiß, werden nur System V-Semaphoren (die, mit denen Sie arbeiten semget(2)) angezeigt. ipcs -sWenn Sie POSIX-Semaphoren (die, mit denen Sie arbeiten sem_open(2)) verwenden, müssen Sie eine andere Methode verwenden.
— Lgeorget

Kennen Sie Terminalbefehle, die die Sorte sem_open (2) zurückgeben? Nur neugierig. Alles, was ich über Semaphoren weiß, steht in der Antwort über 8-).
— slm

Nein, das ist das Problem. ;) Wie die ipcsManpage sagt: "Das Linux-Dienstprogramm ipcs ist nicht vollständig kompatibel mit dem POSIX-Dienstprogramm ipcs." Daher bin ich mir nicht sicher, ob sie überhaupt an etwas für POSIX IPC gedacht haben. Vielleicht eine zukünftige Veröffentlichung von ipcs:).
— Lgeorget

der inhalt der mapbeiden sorten von semaphoren ist gedacht, richtig?
— slm

Ich denke schon. So oder so müssen Semaphoren irgendwo im Prozessspeicher angehängt werden. Ich war mir jedoch nicht sicher, ob SysV-Semaphoren auch im Pseudodateisystem erstellt wurden /dev/shm. Jetzt haben wir die Antwort. :)
— lgeorget
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.