เมื่อฉันทำ
sudo umount /media/KINGSTON
ฉันได้
umount: /media/KINGSTON: device is busy.
ฉันปิดหน้าต่างทั้งหมดและตรวจสอบให้แน่ใจว่าเชลล์ทั้งหมดชี้ไปที่ไดเรกทอรีอื่น ฉันจะค้นหากระบวนการที่ป้องกันไม่ให้ติดตั้งได้อย่างไร
เมื่อฉันทำ
sudo umount /media/KINGSTON
ฉันได้
umount: /media/KINGSTON: device is busy.
ฉันปิดหน้าต่างทั้งหมดและตรวจสอบให้แน่ใจว่าเชลล์ทั้งหมดชี้ไปที่ไดเรกทอรีอื่น ฉันจะค้นหากระบวนการที่ป้องกันไม่ให้ติดตั้งได้อย่างไร
คำตอบ:
เปิด 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^@
หวังว่าจะช่วยได้
ps <pid>
แทนการแก้ไขไฟล์ใน / proc เพื่อดูชื่อคำสั่งและอาร์กิวเมนต์
เครื่องมือที่มีประโยชน์มากที่สุดคือ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 สามารถแสดงรายการข้อมูลบางอย่างเกี่ยวกับกระบวนการของผู้ใช้คนอื่น ๆ แต่มันไม่ตรวจจับจุดเชื่อมต่อดังนั้นจะไม่แสดงรายการพวกเขาหากคุณระบุจุดเชื่อมต่อ
²
รหัสที่ปฏิบัติการได้มักจะเรียกว่าข้อความในการสนทนาของรูปแบบที่ปฏิบัติการได้
นอกจากนี้ยังสามารถช่วย:
lsof | grep \/media\/KINGSTON
grep "media/KINGSTON"
ในขณะเดียวกันคำสั่ง fuser ได้รับการปรับปรุงให้ดีขึ้นมาก คุณสามารถทำงานเต็มได้ด้วยคำสั่งเดียว:
$ sudo fuser -ickv /"mountpoint"
ที่ไหน:
k
ฆ่ากระบวนการที่กระทำผิดv
แสดงกระบวนการและผู้ใช้ล่วงหน้าi
ขอให้คุณยืนยัน หากกระบวนการบางอย่างขัดขืนให้ลองอีกครั้งด้วยfuser -ickv -9
(หรือโดยทั่วไปด้วย-SIGNAL
) ที่ฆ่าสิ่งที่ดื้อที่สุด
แต่คุณจะพบกับกระบวนการ "อมตะ" เสมอ ... !
ในกรณีนี้ฉันเรียนรู้ที่จะใช้ล่าสุด
$ sudo umount --lazy --force <mountpoint>
ในฐานะที่เป็นทรัพยากรสุดท้ายที่ถึงตอนนี้ทำงานให้ฉันทุกครั้ง
vboxmanage
ผมพบว่ากระบวนการอมตะพยายามที่ล้มเหลวของฉันที่จะใช้ -_-