วิธีรับ proccesses ที่กำลังใช้งาน semaphores โดย / proc


16

ฉันสงสัยว่าจะรับกระบวนการที่กำลังใช้งานเซมาฟอร์ได้/procหรือไม่ ฉันเดาว่าเป็นไปได้โดยไดเรกทอรีย่อย SysVIPC แต่ฉันไม่รู้วิธีใช้คำสั่งนี้

Ubuntu 12.10


1
ใน/proc/PID/mapsคุณสามารถดูการทำแผนที่ความทรงจำของกระบวนการและ semaphores POSIX /dev/shmแสดงเป็นไฟล์ที่แนบมาใน ฉันไม่แน่ใจเกี่ยวกับ semaphores ของ SysV
lgeorget

@lgeorget และตัวฉันเองได้ยืนยันว่าทั้ง semaphores POSIX และ SysV ทำจริง ๆ แล้วปรากฏใน/proc/PID/mapsไฟล์สำหรับ PID ที่กำหนด
slm

แต่เห็นได้ชัดว่าชิ้นส่วนหน่วยความจำที่ใช้ร่วมกันยังแสดงเป็นรายการใน/dev/shmและพวกเขาก็แยกไม่ออกจาก semaphores (ยกเว้นถ้าพวกเขามีชื่อที่ฉลาด)
lgeorget

คำตอบ:


22

ipcsเพียงประสบการณ์ของฉันในการจัดการกับสัญญาณและหน่วยความจำที่ใช้ร่วมกันจะผ่านการใช้คำสั่ง ลองดูที่หน้าipcsสำหรับรายละเอียดเพิ่มเติม

คำสั่งนี้แสดงให้คุณเห็นว่ากระบวนการใดมีเซมาฟอร์:

$ ipcs -s

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

ด้วย semid ที่รู้จักกันเราสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับ PID ที่มี semaphores (หมายเหตุมี 8 - คอลัมน์ 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 

คอลัมน์ pid คือกระบวนการเหล่านี้ คุณสามารถค้นหาโดยใช้psหรือค้นหาผ่านระบบ/procไฟล์, /proc/<pid>.

ตัวอย่างเช่น:

$ more /proc/2265/cmdline 
mono

POSIX & SystemV

การสร้างความคิดเห็นที่เหลือโดย @lgeorget ฉันขุดลงใน/proc/2265/mapเนื้อหาของ PID 2265 ของฉันและพบการ/dev/shmอ้างอิงต่อไปนี้:

$ 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

เท่าที่ฉันรู้มีเพียงเซมาฟอร์ System V (ที่คุณได้รับsemget(2)) ปรากฏขึ้นipcs -sดังนั้นถ้าคุณใช้เซมิโคลอน POSIX (ที่คุณได้รับsem_open(2)) คุณต้องใช้วิธีอื่น
lgeorget

รู้คำสั่งเทอร์มินัลใดบ้างที่จะส่งคืนความหลากหลายของเซมพีโอพี แค่สงสัย. ทุกสิ่งที่ฉันรู้เกี่ยวกับเซมาฟอร์อยู่ในคำตอบข้างบน 8-)
slm

ไม่นั่นเป็นปัญหา ;) ตามipcsmanpage พูดว่า: "ยูทิลิตี้ลินุกซ์ ipcs เข้ากันไม่ได้อย่างเต็มที่กับยูทิลิตี้ POSIX ipcs" ดังนั้นฉันไม่แน่ใจว่าพวกเขาจะคิดอะไรบางอย่างสำหรับ POSIX IPC อาจจะเป็นรุ่นอนาคตของipcs:)
lgeorget

เนื้อหาของคำmapว่า semaphores ทั้งสองนั้นคิดว่าถูกต้องหรือไม่?
slm

ฉันเดาอย่างนั้น ไม่ทางใดก็ทางหนึ่ง semaphores ต้องถูกแนบไว้ในหน่วยความจำของกระบวนการ แต่ฉันไม่แน่ใจว่าเซมาฟอร์ SysV นั้นถูกสร้างในระบบไฟล์หลอก/dev/shmด้วย ตอนนี้เรามีคำตอบ :)
lgeorget
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.