Hangi işlemin bir tutarı önlediğini nasıl öğrenebilirim?


26

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?


3
Burada bir yazım hatası olduğunu düşünüyorum, komutun "hangi sürecin bant genişliğimi yediğini nasıl öğrenirim?" ...;
8128

Yanıtlar:


24

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


2
kaynaştırıcı -ck da öldürür.
João Pinto

3
Bu uygulamalara temiz bir şekilde kapanma şansı vermek için ilk önce -9 seçeneği olmadan onları öldürmeyi öneriyorum. Ve ps <pid>komut ismini ve argümanları görmek için / proc içindeki dosyaları düzenlemek yerine kullanmanızı öneririm .
Marius Gedminas

Süreci bulmak için prosedürünüzü takip ediyorum, bu Thunar - deamon. Ek bilgi veren fazladan karakter yok. Henüz onu öldürmedim, çalışan diğer şeyler üzerindeki etkisi konusunda endişeliyim.
Guillaume Coté

7

En kullanışlı araç lsof'dur Lsof yükle . Hangi dosyaların hangi işlemler tarafından kullanıldığını gösterir. Eğer /media/KINGSTONbir 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/KINGSTONTü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

COMMANDSütun Şekil programı çalıştırılabilir ismi ve PIDkolon gösterir işlem kimliği. NAMESü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). USERaçı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 dizini
  • txt: çalıştırılabilir program²
  • mem: hafıza eşlemeli dosya (burada açık dosya olarak düşünün)
  • bir sayı: gerçek bir açık dosya; Bir sonraki harf, rokuma ve wyazma 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( 31421iş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.


2

Ayrıca bu yardımcı olabilir:

lsof | grep \/media\/KINGSTON

4
Eğik çizgilerden kaçmana gerek yok.
Marius Gedminas

Emin olmadığınız zaman, örneğin tırnak işaretleriyle grep edingrep "media/KINGSTON"
Adam Matan,

2

Bu arada kaynaştırıcı komutu çok gelişti. İşin tamamını tek bir komutla yapabilirsiniz:

$ sudo fuser -ickv /"mountpoint"

Nerede:

  • parametre krahatsız edici işlemi öldürür,
  • ise vönceden gösterileri süreci ve onun kullanım
  • ve ionayı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ı.


Ölümsüz süreci buldum, kullanma girişimi başarısız oldum vboxmanage. -_-
sudo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.