वर्तमान में / खरीद द्वारा सेमाफोर चलाने में सफल होने के लिए कैसे?


16

मुझे आश्चर्य है कि वर्तमान में अर्धचालक की प्रक्रियाएँ कैसे प्राप्त करें /proc? मुझे लगता है कि यह SysVIPC उपनिर्देशिका द्वारा संभव है। लेकिन मुझे नहीं पता कि इस आदेश का उपयोग कैसे करें।

उबंटू 12.10


1
में /proc/PID/maps, आप किसी प्रक्रिया की मेमोरी मैपिंग देख सकते हैं और POSIX semaphores में संलग्न फाइलों के रूप में दिखा सकते हैं /dev/shm। मैं हालांकि SysV सेमाफोर के बारे में निश्चित नहीं हूं।
लैगोरेट

@lgeorget और खुद ने पुष्टि की है कि POSIX और SysV सेमाफोर दोनों वास्तव में /proc/PID/mapsकिसी दिए गए PID के लिए फ़ाइल में दिखाते हैं ।
SLM

लेकिन स्पष्ट रूप से, साझा मेमोरी टुकड़े भी प्रविष्टियों के रूप में दिखाई /dev/shmदेते हैं और वे सेमाफोरस से बहुत अप्रभेद्य हैं (सिवाय इसके कि उनके पास चतुर नाम हैं)।
लैगोरेट

जवाबों:


22

सेमाफोर और साझा मेमोरी से निपटने में मेरा एकमात्र अनुभव कमांड के उपयोग के माध्यम से है ipcs। पर एक नजर डालें IPCS आदमी पेज अधिक जानकारी के लिए।

यह कमांड आपको दिखाती है कि किन प्रक्रियाओं में अर्धवृत्त होते हैं:

$ ipcs -s

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

ज्ञात वीर्य के साथ हम PIDs के बारे में अतिरिक्त जानकारी के लिए क्वेरी कर सकते हैं जिनके पास 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 

पिड कॉलम ये प्रक्रियाएं हैं। आप या तो का उपयोग कर उन्हें देख सकते हैं psया के माध्यम से देखो /proc, फ़ाइल-प्रणाली /proc/<pid>

उदाहरण के लिए:

$ more /proc/2265/cmdline 
mono

POSIX और SystemV

@Lgeorget द्वारा छोड़ी गई एक टिप्पणी के निर्माण को मैंने अपने PID 2265 की /proc/2265/mapसामग्री में खोदा और निम्नलिखित /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

जहाँ तक मुझे पता है, केवल सिस्टम वी सेमाफोर (जिन्हें आप प्राप्त करते हैं semget(2)) दिखाते हैं, ipcs -sइसलिए यदि आप पोसिक्स सेमाफोर्स (जिन्हें आप प्राप्त करते हैं sem_open(2)) का उपयोग कर रहे हैं , तो आपको दूसरी विधि का उपयोग करना होगा।
लैगोरेट

किसी भी टर्मिनल कमांड के बारे में जानें जो sem_open (2) किस्म लौटाएगा? बस उत्सुक। सब कुछ जो मैं सेमाफोरस के बारे में जानता हूं वह 8- से ऊपर के उत्तर में है)।
SLM

नहीं, यही समस्या है। ;) जैसा कि ipcsमैनपेज कहता है: "लिनक्स आईपीके उपयोगिता पोसिक्स आईपीसीएस उपयोगिता के लिए पूरी तरह से संगत नहीं है।" इसलिए मुझे यकीन नहीं है कि उन्होंने POSIX IPC के लिए भी कुछ सोचा है। हो सकता है कि भविष्य में ipcs:)।
लैगोरेट

mapक्या दोनों प्रकार के सेमाफोरस की सामग्री सही है, सही है?
SLM

मुझे ऐसा लगता हैं। एक तरह से या किसी अन्य, सेमाफोर को प्रक्रिया मेमोरी में कहीं न कहीं संलग्न होना पड़ता है। लेकिन मुझे यकीन नहीं था कि SysV सेमाफोर भी छद्म फाइल सिस्टम में बनाए गए थे /dev/shm। अब, हमारे पास इसका जवाब है। :)
lgeorget
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.