/ Proc tarafından şu anda semaforlar çalıştıran süreçler nasıl edinilir?


16

Şu anda semafor çalışan süreçlerin nasıl elde edileceğini merak ediyorum /proc? Sanırım SysVIPC alt dizini ile mümkün. Ama bu komutları nasıl kullanacağımı bilmiyorum.

Ubuntu 12.10


1
İçinde /proc/PID/maps, bir işlemin bellek eşlemesini görebilirsiniz ve POSIX semaforları ekli dosyalar olarak görünür /dev/shm. SysV semaforlarından emin değilim.
lgeorget

@lgeorget ve ben POSIX ve SysV semaforlarının aslında /proc/PID/mapsbelirli bir PID için dosyada göründüğünü doğruladık .
slm

Ancak görünüşe göre, paylaşılan bellek parçaları da girişler olarak görünür /dev/shmve semaforlardan oldukça ayırt edilemezler (akıllı isimleri varsa).
lgeorget

Yanıtlar:


22

Semaforlar ve paylaşılan hafıza ile ilgili tek deneyimim, komutun kullanılmasıdır ipcs. Bir göz atın ipcs adam sayfası daha fazla ayrıntı için.

Bu komut hangi işlemlerin semaforlarına sahip olduğunu gösterir:

$ ipcs -s

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

Bilinen semid ile semaforlu PID'ler hakkında ek bilgi sorgulayabiliriz (8 tane var - nsems sütunu):

$ 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 

Pid sütunu bu süreçlerdir. Bunları kullanarak psya da /procdosya sistemini arayabilir /proc/<pid>,.

Örneğin:

$ more /proc/2265/cmdline 
mono

POSIX ve SystemV

@Lgeorget tarafından bırakılan bir yorumdan yola çıkarak PID 2265 /proc/2265/mapiçeriklerime girdim ve aşağıdaki /dev/shmreferansları buldum :

$ 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

Bildiğim kadarıyla, yalnızca System V semaforları (aldığınız semget(2)) görünür, ipcs -sbu yüzden POSIX semaforlarını (aldığınız sem_open(2)) kullanıyorsanız, başka bir yöntem kullanmanız gerekir.
lgeorget

Sem_open (2) çeşidini döndürecek herhangi bir terminal komutunu biliyor musunuz? Sadece merak. Semaforlar hakkında bildiğim her şey yukarıdaki cevapta 8-).
slm

Hayır, sorun bu. ;) ipcsManpage'in dediği gibi: "Linux ipcs yardımcı programı POSIX ipcs yardımcı programıyla tam uyumlu değildir." POSIX IPC için bir şey düşündüklerinden emin değilim. Belki gelecekteki bir sürümü ipcs:).
lgeorget

içeriği mapdoğru, semafor her iki çeşidi en düşündü nelerdir?
slm

Sanırım öyle. Semaforların şu ya da bu şekilde işlem belleğinde bir yere takılması gerekir. Ancak sözde dosya sisteminde SysV semaforlarının da oluşturulduğundan emin değildim /dev/shm. Şimdi cevabımız var. :)
lgeorget
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.