Як я можу дізнатися, який процес запобігає проникненню?


26

Коли я це роблю

sudo umount /media/KINGSTON

я зрозумів, я отримав

umount: /media/KINGSTON: device is busy.

Я закриваю всі вікна і переконуюсь, що вся оболонка вказує на інші каталоги. Як я можу знайти, який процес перешкоджає численності?


3
Я думаю, що у вас тут є помилка друку, я сумніваюся, що команда повернулася "Як я дізнаюся, який процес з'їдає мою пропускну здатність?" ...;) будь-який шанс ви зможете редагувати питання, будь ласка?
8128

Відповіді:


24

відкрити термінал:

fuser -c /media/KINGSTON

Він виведе щось подібне:

/media/KINGSTON/: 3106c 11086

Це дасть вам приємність процесів, що використовують цей обсяг. Додатковий символ в кінці pid дасть додаткову інформацію. (c 3106c)

c - процес використовує файл як його поточний робочий каталог
m - файл відображається з mmap
o - процес використовує його як відкритий файл
r - файл - кореневий каталог процесу
t - процес отримує доступ до файл як текстовий файл
y - цей файл є керуючим терміналом процесу

Отже, для демонстрації просто вбийте ці піди та повторіть спробу зняти

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

Примітка. Щоб знайти точну назву програми для цих підручників, ви можете скористатися цією командою

cat /proc/<pid>/cmdline

Наприклад : cat /proc/11086/cmdline

це виведе щось подібне нижче.

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

Сподіваюсь, це допоможе


2
fuser -ck також його вб'є.
Жоао Пінто

3
Я б запропонував спочатку їх вбити без варіанта -9, щоб дати можливість цим програмам чисто закрити. І я б запропонував використовувати ps <pid>замість редагування файлів у / proc, щоб побачити ім'я команди та аргументи.
Маріус Гедмінас

Я дотримуюся вашої процедури, щоб знайти процес, це Thunar - deamon. Немає зайвих символів, що дають додаткову інформацію. Я його ще не вбив, я турбуюся про вплив, який він може мати на іншу працю.
Гійом Коте

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стовпець - ідентифікатор процесу. У NAMEстовпці відображається назва файлу; ви можете побачити, (deleted)якщо файл було видалено під час відкриття (коли файл видалений, він більше не має імені, але він все ще існує, поки останній процес його використання не закриє файл). USERповинні бути роз'яснювальними. Інші стовпці тут не мають значення, крім, можливо FD, що показує, як файл використовується процесом:

  • cwd: поточний робочий каталог
  • txt: виконаний програмою²
  • mem: файл зі пам’яттю, відображений на пам'ять (тут, подумайте про це як про відкритий файл)
  • число: власне відкритий файл; наступний лист вказує на режим відкриття, такий як rдля читання та wдля письма

Не існує механічного способу пошуку вікна, де відкритий файл (це насправді технічно не має сенсу: якщо процес має декілька вікон, файл особливо не асоціюється з одним чи іншим вікном), а також навіть будь-який простий спосіб ідентифікації вікно процесу (і, звичайно, у процесі не повинно бути вікон). Але зазвичай імені команди та імені файлів достатньо, щоб знайти злочинця та правильно закрити файл.

Якщо ви не можете закрити файл і просто хочете закінчити все, ви можете вбити процес kill 31421(за 31421допомогою ідентифікатора процесу) або kill -HUP 31421("зависнути"). Якщо звичайне вбивство не робить трюк, вбивайте з крайніми забобонами:kill -KILL 31421 .

Існує графічний інтерфейс для lsof, glsof , але він ще не зовсім готовий до прайм- , і поки не пакується для Ubuntu.

¹ Lsof може перелічити деяку інформацію про процеси інших користувачів, але він не визначає точку монтування, тому не буде перелічувати їх, якщо вказати точку монтування.
² Виконавчим кодом часто називають текст під час обговорення виконавчих форматів.



2

Тим часом команда плавника значно покращилася. Ви можете виконати повну роботу за допомогою однієї команди:

$ sudo fuser -ickv /"mountpoint"

Де:

  • параметр kвбиває процес порушника,
  • при цьому vзаздалегідь показує процес та його користувача
  • і iпросить у вас підтвердження.

Якщо якийсь процес чинить опір, то спробуйте ще раз fuser -ickv -9(або в більш загальному випадку з -SIGNAL), що вбиває найбільш впертих.
Але ви завжди знайдете якийсь "безсмертний" процес ...!

У цьому випадку я останнім часом навчився користуватися

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

як останній ресурс, який до цього часу працював для мене кожен раз.


Я знайшов безсмертний процес, свою невдалу спробу використовувати vboxmanage. -_-
судо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.