Ben yaparken
sudo umount /media/KINGSTON
Bende var
umount: /media/KINGSTON: device is busy.
Bütün pencereleri kapattım ve tüm kabuğun diğer dizinleri gösterdiğinden emin olun. Hangi işlemin tutarı engellediğini nasıl bulabilirim?
Ben yaparken
sudo umount /media/KINGSTON
Bende var
umount: /media/KINGSTON: device is busy.
Bütün pencereleri kapattım ve tüm kabuğun diğer dizinleri gösterdiğinden emin olun. Hangi işlemin tutarı engellediğini nasıl bulabilirim?
Yanıtlar:
bir terminal açmak:
fuser -c /media/KINGSTON
Bunun gibi bir şey çıkacaktır:
/media/KINGSTON/: 3106c 11086
Bu size bu cildi kullanan işlemlerin pidini verecektir. Pid sonunda ekstra karakter bazı ekstra bilgi verecektir. (3106c'de c)
c - işlem, dosyayı geçerli çalışma dizini olarak kullanıyor
m - dosya mmap ile eşleştiriliyor
o - işlem açık bir dosya olarak kullanıyor
r - dosya işlemin kök dizini
t - işlem erişiyor metin dosyası olarak dosya
y - bu dosya işlem için kontrol terminalidir
Bu yüzden unmount sadece bu pids öldürmek ve unmount yeniden deneyin
sudo kill -9 3106 11086
sudo umount /media/KINGSTON
Not: Bu çukurların tam adını bulmak için bu komutu kullanabilirsiniz.
cat /proc/<pid>/cmdline
Örneğin : cat /proc/11086/cmdline
Bu, aşağıdaki gibi bir şey çıktısını alacak.
evince^@/media/KINGSTON/Ubuntu-guide.pdf^@
Umarım bu yardımcı olur
ps <pid>
komut ismini ve argümanları görmek için / proc içindeki dosyaları düzenlemek yerine kullanmanızı öneririm .
En kullanışlı araç lsof'dur . Hangi dosyaların hangi işlemler tarafından kullanıldığını gösterir. Eğer /media/KINGSTON
bir bağlama noktası (aygıt adı çalışmaları da olur), aşağıdaki komutu gösterileri bu monte noktada kullanımda olan tüm dosyaları:
lsof /media/KINGSTON
Bu komutu sıradan bir kullanıcı olarak çalıştırırsanız, sadece kendi işlemlerinizi gösterecektir¹. sudo lsof /media/KINGSTON
Tüm kullanıcıların işlemlerini görmek için çalıştırın .
Buradaki çıktı lsof
şöyle gözüküyor:
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
Sütun Şekil programı çalıştırılabilir ismi ve PID
kolon gösterir işlem kimliği. NAME
Sütun dosya adını gösterir; (deleted)
Dosyanın açıkken silinip silinmediğini görebilirsiniz (bir dosya silindiğinde, artık bir adı yoktur, ancak dosyayı kullanan son işlem olana kadar devam eder). USER
açıklayıcı olmalıdır. Diğer sütunlar burada önemli değil FD
, belki de dosyanın işlem tarafından nasıl kullanıldığını gösterir.
cwd
: mevcut çalışma dizinitxt
: çalıştırılabilir program²mem
: hafıza eşlemeli dosya (burada açık dosya olarak düşünün)r
okuma ve w
yazma gibi açılış modunu gösterir.Bir dosyanın açık olduğu pencereyi bulmanın mekanik bir yolu yoktur (bu aslında teknik olarak anlamlı değildir: bir işlem birkaç pencereye sahipse, bir dosya özellikle bir pencere veya diğeriyle ilişkilendirilmez), hatta herhangi bir tanımlamanın basit bir yolu bile Bir işlemin penceresi (ve elbette bir işlemin herhangi bir penceresi olması gerekmez). Ancak genellikle komut adı ve dosya adı suçluyu bulmak ve dosyayı doğru şekilde kapatmak için yeterlidir.
Dosyayı kapatamazsanız ve yalnızca hepsini sonlandırmak istiyorsanız, işlemi kill 31421
( 31421
işlem kimliği nerede ) veya kill -HUP 31421
(“kapatma”) ile birlikte öldürebilirsiniz . Düz öldürme hile yapmazsa, aşırı önyargı ile öldürmek: kill -KILL 31421
.
Lsof , glsof için bir GUI var , ancak henüz asal zaman için pek hazır değil ve şu ana kadar Ubuntu için paketlenmedi.
¹
lsof Diğer kullanıcıların en süreçleri hakkında bazı bilgiler listeleyebilirsiniz, ancak bir bağlama noktası belirtirseniz bağlama noktası yüzden onları liste değildir algılamaz.
²
Çalıştırılabilir kod, genellikle yürütülebilir biçimlerin tartışmalarında metin olarak adlandırılır.
Ayrıca bu yardımcı olabilir:
lsof | grep \/media\/KINGSTON
grep "media/KINGSTON"
Bu arada kaynaştırıcı komutu çok gelişti. İşin tamamını tek bir komutla yapabilirsiniz:
$ sudo fuser -ickv /"mountpoint"
Nerede:
k
rahatsız edici işlemi öldürür,v
önceden gösterileri süreci ve onun kullanımi
onayınızı ister. Bazı süreçler direnirse, en inatçı olanları öldüren fuser -ickv -9
(veya daha genel olarak -SIGNAL
) ile tekrar deneyin .
Ama her zaman bazı "ölümsüz" bir süreç bulacaksınız ...!
Bu durumlarda son zamanlarda kullanmayı öğrendim
$ sudo umount --lazy --force <mountpoint>
Son bir kaynak olarak, şu ana kadar her zaman benim için çalıştı.
vboxmanage
. -_-