Bagaimana cara mendapatkan proses yang saat ini menjalankan semaphores oleh / proc?

16

Saya bertanya-tanya bagaimana cara mendapatkan proses yang saat ini menjalankan semaphores /proc? Saya kira itu mungkin dilakukan oleh subdirektori SysVIPC. Tetapi saya tidak tahu bagaimana cara menggunakan perintah ini.

Ubuntu 12.10

Hanna
sumber
1
Di /proc/PID/maps, Anda dapat melihat pemetaan memori dari suatu proses dan semaphores POSIX muncul sebagai file yang dilampirkan di /dev/shm. Saya tidak yakin tentang Saphv semaphores.
lgeorget
@ lgeorget dan saya sendiri telah mengkonfirmasi bahwa semaphores POSIX dan SysV benar-benar muncul di /proc/PID/mapsfile untuk PID yang diberikan.
slm
Tetapi ternyata, fragmen memori bersama juga muncul sebagai entri /dev/shmdan mereka cukup dibedakan dari semaphore (kecuali jika mereka memiliki nama yang pintar).
lgeorget

Jawaban:

21

Satu-satunya pengalaman saya dalam berurusan dengan semaphores dan memori bersama adalah melalui penggunaan perintah ipcs. Lihatlah halaman manual ipcs untuk lebih jelasnya.

Perintah ini menunjukkan kepada Anda proses apa yang memiliki semaphores:

$ ipcs -s

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

Dengan semid diketahui, kami dapat meminta informasi tambahan tentang PID yang memiliki semaphores (perhatikan ada 8 - kolom 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 

Kolom pid adalah proses-proses ini. Anda dapat mencari mereka menggunakan psatau melihat melalui sistem /procfile /proc/<pid>,.

Sebagai contoh:

$ more /proc/2265/cmdline 
mono

POSIX & SystemV

Membangun dari komentar yang ditinggalkan oleh @lgeorget Saya menggali /proc/2265/mapisi PID 2265 saya dan menemukan /dev/shmreferensi berikut :

$ 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
sumber
Sejauh yang saya tahu, hanya System V semaphores (yang Anda dapatkan semget(2)) muncul di ipcs -sjadi jika Anda menggunakan semaphores POSIX (yang Anda dapatkan dengan sem_open(2)), Anda harus menggunakan metode lain.
lgeorget
Tahu ada perintah terminal yang akan mengembalikan sem_open (2) variety? Hanya penasaran. Semua yang saya tahu tentang semaphores ada di jawaban di atas 8-).
slm
Tidak, itu masalahnya. ;) Seperti yang ipcsdikatakan halaman manual: "Utilitas ipcs Linux tidak sepenuhnya kompatibel dengan utilitas ipcs POSIX." jadi saya tidak yakin mereka bahkan memikirkan sesuatu untuk POSIX IPC. Mungkin rilis ipcs:).
lgeorget
isi mapkeduanya variasi pemikiran semafor, benar?
slm
Saya rasa begitu. Dengan satu atau lain cara, semafor harus dipasang di suatu tempat dalam memori proses. Tapi saya tidak yakin semafor SysV juga dibuat di sistem file semu /dev/shm. Sekarang, kita punya jawabannya. :)
lgeorget