मुझे कैसे पता चलेगा कि कौन सी प्रक्रिया एक ऑमाउंट को रोक रही है?


26

जब मैं करता हूं

sudo umount /media/KINGSTON

मुझे मिला

umount: /media/KINGSTON: device is busy.

मैं सभी खिड़कियां बंद करता हूं और सुनिश्चित करता हूं कि सभी शेल अन्य निर्देशिकाओं की ओर इशारा कर रहे हैं। मैं कैसे पता लगा सकता हूं कि कौन सी प्रक्रिया ऑमाउंट को रोक रही है?


3
मुझे लगता है कि आपको यहां एक टाइपो मिल गया है, मुझे संदेह है कि कमांड ने लौटाया "मुझे कैसे पता चलेगा कि कौन सी प्रक्रिया मेरे बैंडविड्थ को खा रही है?" ...;) कोई भी मौका जिससे आप प्रश्न को संपादित कर सकें?
8128

जवाबों:


24

एक टर्मिनल खोलें:

fuser -c /media/KINGSTON

यह कुछ इस तरह से उत्पादन करेगा:

/media/KINGSTON/: 3106c 11086

यह आपको इस वॉल्यूम का उपयोग करने वाली प्रक्रियाओं की सूचना देगा। पिड के अंत में अतिरिक्त चरित्र कुछ अतिरिक्त जानकारी देगा। (सी 3106 सी में)

c - प्रक्रिया फ़ाइल को उसकी वर्तमान कार्यशील निर्देशिका
m के रूप में उपयोग कर रही है - फ़ाइल को mmap
o के साथ मैप किया गया है - प्रक्रिया इसे एक खुली फ़ाइल
r के रूप में उपयोग कर रही है - फ़ाइल प्रक्रिया
t की मूल निर्देशिका है - प्रक्रिया एक्सेस कर रही है एक फ़ाइल के रूप में फ़ाइल
y - यह फ़ाइल प्रक्रिया के लिए नियंत्रण टर्मिनल है

अतः अनमाउंट करने के लिए केवल उस pids को मारें और अनमाउंट को पुनः आज़माएँ

sudo kill -9 3106 11086
sudo umount /media/KINGSTON

नोट: इन pids के सटीक अनुप्रयोग नाम को खोजने के लिए आप इस कमांड का उपयोग कर सकते हैं

cat /proc/<pid>/cmdline

उदाहरण के लिए : cat /proc/11086/cmdline

यह नीचे की तरह कुछ उत्पादन होगा।

    evince^@/media/KINGSTON/Ubuntu-guide.pdf^@

आशा है कि यह मदद करेगा


2
fuser -ck भी इसे मार देगा।
जोओ पिंटो

3
मैं पहले उन -9 विकल्प के बिना उन्हें मारने का सुझाव दूंगा, उन अनुप्रयोगों को सफाई से बंद करने का मौका देने के लिए। और मैं ps <pid>कमांड नाम और तर्कों को देखने के लिए / proc में संपादन फ़ाइलों के बजाय उपयोग करने का सुझाव दूंगा।
मारियस गेदमिनस

मैं इस प्रक्रिया को खोजने के लिए आपकी प्रक्रिया का पालन करता हूं, यह थूनर है - बहरा। अतिरिक्त जानकारी देने वाले कोई अतिरिक्त चरित्र नहीं हैं। मैंने इसे अभी तक नहीं मारा है, मैं इसके प्रभाव के बारे में चिंता कर रहा हूं जो चल रहे अन्य चीजों पर पड़ सकता है।
गिलौम कोटे

7

सबसे उपयोगी उपकरण lsof है Lsof स्थापित करें । यह दिखाता है कि कौन सी फाइलें किस प्रक्रिया द्वारा उपयोग की जाती हैं। यदि /media/KINGSTONकोई माउंट पॉइंट है (डिवाइस का नाम भी काम करेगा), निम्न कमांड उन सभी फाइलों को दिखाता है जो इस आरोह बिंदु पर उपयोग में हैं:

lsof /media/KINGSTON

यदि आप इस कमांड को एक साधारण उपयोगकर्ता के रूप में चलाते हैं, तो यह केवल आपकी स्वयं की प्रक्रियाओं को दिखाएगा। sudo lsof /media/KINGSTONसभी उपयोगकर्ताओं की प्रक्रियाओं को देखने के लिए चलाएँ ।

इस lsofतरह से उत्पादन इस तरह दिखता है:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
zsh4    31421 gilles  cwd    DIR    8,1     4096 130498 /var/tmp
zsh4    31421 gilles  txt    REG    8,1   550804 821292 /bin/zsh4
zsh4    31421 gilles  mem    REG    8,1    55176 821326 /usr/lib/zsh/4.3.10/zsh/complist.so
zsh4    31421 gilles   12r   REG    8,1   175224 822276 /usr/share/zsh/functions/Completion.zwc

COMMANDस्तंभ शो कार्यक्रम निष्पादन के नाम और PIDस्तंभ शो प्रक्रिया ID। NAMEस्तंभ फ़ाइल नाम पता चलता है; आप देख सकते हैं (deleted)कि फ़ाइल को खोलने के दौरान हटा दिया गया था (जब कोई फ़ाइल हटा दी जाती है, तो उसका अब नाम नहीं है, लेकिन यह तब भी मौजूद है जब तक कि अंतिम प्रक्रिया का उपयोग करके फ़ाइल बंद नहीं हो जाती)। USERआत्म-व्याख्यात्मक होना चाहिए। अन्य स्तंभों को शायद यहां छोड़कर कोई फर्क नहीं पड़ता FD, जो दिखाता है कि प्रक्रिया द्वारा फ़ाइल का उपयोग कैसे किया जाता है:

  • cwd: वर्तमान कार्य निर्देशिका
  • txt: कार्यक्रम निष्पादन योग्य
  • mem: एक मेमोरी-मैप्ड फ़ाइल (यहां, इसे एक ओपन फाइल के रूप में सोचें)
  • एक संख्या: एक वास्तविक खुली फाइल; एक बाद का अक्षर उद्घाटन मोड को इंगित करता है, जैसे rपढ़ने के लिए और wलिखने के लिए

खिड़की का पता लगाने के लिए कोई यांत्रिक तरीका नहीं है जहां एक फ़ाइल खुली है (यह वास्तव में तकनीकी रूप से सार्थक नहीं है: यदि किसी प्रक्रिया में कई खिड़कियां हैं, तो एक फ़ाइल विशेष रूप से एक खिड़की या किसी अन्य से जुड़ी नहीं है), और न ही पहचान करने का कोई सरल तरीका एक प्रक्रिया की खिड़की (और निश्चित रूप से एक प्रक्रिया के पास कोई विंडो नहीं है)। लेकिन आमतौर पर कमांड का नाम और फ़ाइल का नाम अपराधी का पता लगाने और फ़ाइल को ठीक से बंद करने के लिए पर्याप्त है।

यदि आप फ़ाइल को बंद नहीं कर सकते हैं और बस इसे समाप्त करना चाहते हैं, तो आप इस प्रक्रिया को kill 31421(जहाँ 31421प्रक्रिया आईडी है) या kill -HUP 31421("हैंग अप") मार सकते हैं । यदि सादा हत्या चाल नहीं करती है, तो अत्यधिक पूर्वाग्रह के साथ मारें kill -KILL 31421:।

Lsof , glsof के लिए एक GUI है , लेकिन यह अभी तक प्राइम टाइम के लिए बिल्कुल तैयार नहीं है, और उबंटू के लिए अभी तक पैक नहीं किया गया है।

¹ Lsof अन्य उपयोगकर्ताओं की प्रक्रियाओं के बारे में कुछ जानकारी सूचीबद्ध कर सकता है, लेकिन यह आरोह बिंदु का पता नहीं लगाता है इसलिए यदि आप एक आरोह बिंदु निर्दिष्ट करते हैं तो उन्हें सूचीबद्ध नहीं करेंगे।
² निष्पादन कोड अक्सर निष्पादन योग्य प्रारूपों के विचार विमर्श में पाठ कहा जाता है।



2

इस बीच फ्यूज़र कमांड में बहुत सुधार हुआ है। आप एक ही आदेश के साथ पूरा काम कर सकते हैं:

$ sudo fuser -ickv /"mountpoint"

कहा पे:

  • पैरामीटर kअपमानजनक प्रक्रिया को मारता है,
  • जबकि vअग्रिम प्रक्रिया और उसके उपयोगकर्ता को दिखाता है
  • और iपुष्टि के लिए आपसे पूछता है।

यदि कुछ प्रक्रिया में बाधा आती है, तो सबसे जिद्दी लोगों को मारने के साथ fuser -ickv -9(या आमतौर पर अधिक -SIGNAL) के साथ फिर से प्रयास करें ।
लेकिन आपको हमेशा कुछ "अमर" प्रक्रिया मिलेगी ...!

इस मामले में मैंने हाल ही में उपयोग करना सीखा

$ sudo umount --lazy --force <mountpoint>

पिछले संसाधन के रूप में, अब तक हर बार मेरे लिए काम किया।


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