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.
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:
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:
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. :)
/proc/PID/maps
kö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./proc/PID/maps
für eine bestimmte PID tatsächlich in der Datei angezeigt werden ./dev/shm
und sind von Semaphoren kaum zu unterscheiden (außer wenn sie clevere Namen haben).Antworten:
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:
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):
Die PID-Spalte sind diese Prozesse. Sie können sie entweder mit
ps
oder über das/proc
Dateisystem suchen/proc/<pid>
.Beispielsweise:
POSIX & SystemV
Aufbauend auf einem Kommentar von @lgeorget habe ich mich mit dem
/proc/2265/map
Inhalt meiner PID 2265 befasst und die folgenden/dev/shm
Referenzen gefunden:quelle
semget(2)
) angezeigt.ipcs -s
Wenn Sie POSIX-Semaphoren (die, mit denen Sie arbeitensem_open(2)
) verwenden, müssen Sie eine andere Methode verwenden.ipcs
Manpage 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 vonipcs
:).map
beiden sorten von semaphoren ist gedacht, richtig?/dev/shm
. Jetzt haben wir die Antwort. :)