/ 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.