ฉันจะทราบได้อย่างไรว่ากระบวนการใดบ้างที่ป้องกันไม่ให้เข้าสู่ระบบ


26

เมื่อฉันทำ

sudo umount /media/KINGSTON

ฉันได้

umount: /media/KINGSTON: device is busy.

ฉันปิดหน้าต่างทั้งหมดและตรวจสอบให้แน่ใจว่าเชลล์ทั้งหมดชี้ไปที่ไดเรกทอรีอื่น ฉันจะค้นหากระบวนการที่ป้องกันไม่ให้ติดตั้งได้อย่างไร


3
ฉันคิดว่าคุณพิมพ์ผิดที่นี่ฉันสงสัยว่าคำสั่งคืน "ฉันจะหากระบวนการที่กินแบนด์วิดธ์ของฉันได้อย่างไร" ... ;) โอกาสใดที่คุณสามารถแก้ไขคำถามได้โปรด?
8128

คำตอบ:


24

เปิด terminal:

fuser -c /media/KINGSTON

มันจะออกผลลัพธ์ดังนี้:

/media/KINGSTON/: 3106c 11086

สิ่งนี้จะให้ pid ของกระบวนการโดยใช้วอลุ่มนี้ อักขระพิเศษท้าย pid จะให้ข้อมูลเพิ่มเติม (c ใน 3106c)

c - กระบวนการใช้ไฟล์เป็นไดเร็กทอรีการทำงานปัจจุบัน
m - ไฟล์ถูกแม็พด้วย mmap
o - กระบวนการกำลังใช้เป็นไฟล์เปิด
r - ไฟล์เป็นไดเร็กทอรีรูทของกระบวนการ
t - กระบวนการกำลังเข้าถึง file เป็นไฟล์ข้อความ
y - ไฟล์นี้เป็นเทอร์มินัลการควบคุมสำหรับกระบวนการ

ดังนั้นในการเลิกเมานท์เพียงแค่ฆ่า pids นั้นและลอง unmount อีกครั้ง

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 ก็จะฆ่ามันเช่นกัน
João Pinto

3
ฉันขอแนะนำให้ฆ่าพวกเขาโดยไม่ใช้ตัวเลือก -9 ก่อนเพื่อให้แอปพลิเคชันเหล่านั้นมีโอกาสที่จะปิดตัวลงอย่างหมดจด และฉันขอแนะนำให้ใช้ps <pid>แทนการแก้ไขไฟล์ใน / proc เพื่อดูชื่อคำสั่งและอาร์กิวเมนต์
Marius Gedminas

ฉันทำตามขั้นตอนของคุณเพื่อค้นหากระบวนการมันคือ Thunar - deamon ไม่มีอักขระพิเศษที่ให้ข้อมูลเพิ่มเติม ฉันยังไม่ฆ่ามันฉันกังวลเกี่ยวกับผลกระทบที่อาจเกิดขึ้นกับสิ่งอื่นที่กำลังทำงานอยู่
Guillaume Coté

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การเขียน

ไม่มีวิธีเชิงกลในการค้นหาหน้าต่างที่ไฟล์เปิดอยู่ (อันที่จริงแล้วไม่มีความหมายทางเทคนิค: หากกระบวนการมีหลาย windows ไฟล์จะไม่เกี่ยวข้องโดยเฉพาะกับหน้าต่างหนึ่งหรืออีกหน้าต่างหนึ่ง) หรือแม้แต่วิธีง่ายๆในการระบุ หน้าต่างของกระบวนการ (และแน่นอนว่ากระบวนการไม่จำเป็นต้องมีหน้าต่างใด ๆ ) แต่โดยปกติชื่อคำสั่งและชื่อไฟล์นั้นเพียงพอที่จะค้นหาผู้กระทำผิดและปิดไฟล์ได้อย่างเหมาะสม

หากคุณไม่สามารถปิดไฟล์และเพียงต้องการจบมันทั้งหมดคุณสามารถฆ่ากระบวนการด้วยkill 31421(ที่31421เป็น ID กระบวนการ) หรือkill -HUP 31421(“ วางสาย”) ถ้าการฆ่าธรรมดาไม่ได้ใช้เล่ห์อุบายจงฆ่าด้วยอคติอย่างรุนแรง: kill -KILL 31421.

มี GUI สำหรับ lsof, glsof , แต่ยังไม่พร้อมสำหรับช่วงไพร์มไทม์, และยังไม่ได้บรรจุสำหรับ Ubuntu จนถึงตอนนี้

¹ Lsof สามารถแสดงรายการข้อมูลบางอย่างเกี่ยวกับกระบวนการของผู้ใช้คนอื่น ๆ แต่มันไม่ตรวจจับจุดเชื่อมต่อดังนั้นจะไม่แสดงรายการพวกเขาหากคุณระบุจุดเชื่อมต่อ
² รหัสที่ปฏิบัติการได้มักจะเรียกว่าข้อความในการสนทนาของรูปแบบที่ปฏิบัติการได้


2

นอกจากนี้ยังสามารถช่วย:

lsof | grep \/media\/KINGSTON

4
ไม่จำเป็นต้องหลบหลีกการสแลช
Marius Gedminas

เมื่อคุณไม่แน่ใจให้ grep พร้อมคำพูดเช่นgrep "media/KINGSTON"
Adam Matan

2

ในขณะเดียวกันคำสั่ง fuser ได้รับการปรับปรุงให้ดีขึ้นมาก คุณสามารถทำงานเต็มได้ด้วยคำสั่งเดียว:

$ sudo fuser -ickv /"mountpoint"

ที่ไหน:

  • พารามิเตอร์kฆ่ากระบวนการที่กระทำผิด
  • ในขณะที่vแสดงกระบวนการและผู้ใช้ล่วงหน้า
  • และiขอให้คุณยืนยัน

หากกระบวนการบางอย่างขัดขืนให้ลองอีกครั้งด้วยfuser -ickv -9(หรือโดยทั่วไปด้วย-SIGNAL) ที่ฆ่าสิ่งที่ดื้อที่สุด
แต่คุณจะพบกับกระบวนการ "อมตะ" เสมอ ... !

ในกรณีนี้ฉันเรียนรู้ที่จะใช้ล่าสุด

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

ในฐานะที่เป็นทรัพยากรสุดท้ายที่ถึงตอนนี้ทำงานให้ฉันทุกครั้ง


vboxmanageผมพบว่ากระบวนการอมตะพยายามที่ล้มเหลวของฉันที่จะใช้ -_-
sudo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.