किसी फ़ाइल को लॉक करने की प्रक्रिया की पहचान कैसे करें?


35

मैं उस सटीक प्रक्रिया को जानना चाहता हूं जो लॉक फ़ाइल का उपयोग कर रही है। मैं इसे ठीक नहीं करना चाहता , लेकिन यह जानने के लिए कि मेरा सिस्टम क्या कर रहा है। मैं कैसे पता लगाऊं?

उदाहरण के लिए, यह संदेश:

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

फिर से, मैं सिर्फ इसका उपयोग करने की प्रक्रिया की पहचान करना चाहता हूं, कि इसे कैसे ठीक करना है।

जवाबों:


38

बदनाम है lsof:

sudo lsof /var/lib/dpkg/lock
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
aptitude 4974 root    3uW  REG   8,23        0 815673 /var/lib/dpkg/lock

इस मामले में एप्टीट्यूड फ़ाइल का उपयोग कर रहा है। यदि आप सुनिश्चित नहीं हैं कि उपयोगकर्ता फ़ाइल को लॉक कर रहा है, तो आपको रूट का उपयोग करना चाहिए। यह चीजों के एक समूह के लिए भी उपयोगी है, दुख की बात है कि यह उबंटू के साथ स्थापित नहीं है, इसलिए आपको इसे पहले स्थापित करना होगा।

बाकी नश्वर लोगों के लिए, fuserआज्ञा है। यह अजीब है क्योंकि यह प्रक्रिया के नाम के बजाय केवल पीआईडी ​​लौटाता है:

➜  ~  sudo fuser /var/lib/dpkg/lock
/var/lib/dpkg/lock:   4974

यहां यह कहा गया है कि फ़ाइल और पीआईडी, जो कि 4974 है, इसलिए हमें जांच करनी चाहिए कि कौन है:

➜  ~  ps 4974
  PID TTY      STAT   TIME COMMAND
 4974 pts/1    Sl+    0:06 aptitude

6
lsofबदनाम क्यों है ? क्या इसके साथ कुछ समस्याएं हैं?
रुसलान

3
@Ruslan हाँ, यह क्लूलेस उपयोगकर्ताओं को सिस्टम के वास्तविक उपयोग को जानने की अनुमति देता है जो कि sysadmins चाहता है ...
Braiam

@Braiam सही हाथों में बहुत अधिक जानकारी एक खतरनाक चीज हो सकती है? ^ -_- ^
पीटर डेविड कार्टर

एक पंक्ति में दूसरा विकल्प:ps $(sudo fuser /var/lib/dpkg/lock)
wjandrea

8

lslocks ऐसा करने का एक सरल तरीका है।

lslocks |grep /var/lib/dpkg/lock

प्रक्रिया आईडी को संभालने के लिए शेल के उपयोग के लिए:

for pid in `lslocks -rn | grep /var/lib/dpkg/lock|awk '{print $2}'`;
do 
    echo $pid; 
done

हाँ। lslocksइसके बारे में जाने का सबसे अच्छा तरीका है। lsofमुझे इस त्रुटि का उपयोग करते हुए : "lsof: चेतावनी: स्टेट नहीं कर सकता () fuse.gvfsd-fuse फ़ाइल सिस्टम / रन / उपयोगकर्ता / 1000 / gvfs आउटपुट जानकारी अधूरी हो सकती है"
Nav

@ कोई त्रुटि नहीं है, लेकिन चेतावनी।
ब्रिअम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.