어떤 프로세스가 umount를 방해하는지 어떻게 알 수 있습니까?


26

내가 할 때

sudo umount /media/KINGSTON

알았어

umount: /media/KINGSTON: device is busy.

모든 창을 닫고 모든 쉘이 다른 디렉토리를 가리키고 있는지 확인하십시오. 어떤 프로세스가 umount를 방해하는지 어떻게 알 수 있습니까?


3
오타가 있다고 생각합니다. 명령이 "어떤 프로세스가 내 대역폭을 소비하고 있는지 어떻게 알 수 있습니까?"를 반환했는지 의심합니다. 질문을 편집 할 수 있습니까?
8128

답변:


24

터미널을여십시오 :

fuser -c /media/KINGSTON

다음과 같이 출력됩니다 :

/media/KINGSTON/: 3106c 11086

이것은이 볼륨을 사용하는 프로세스의 pid를 제공합니다. pid 끝에있는 추가 문자는 추가 정보를 제공합니다. (3106c의 c)

c-프로세스가 파일을 현재 작업 디렉토리로 사용 중
m-파일이 mmap
o 로 맵핑 됨 -프로세스가 파일을 열린 파일로 사용 중
r-파일이 프로세스의 루트 디렉토리
t-프로세스가 액세스 중 텍스트 파일로 파일
y-이 파일은 프로세스의 제어 터미널입니다.

마운트 해제하려면 pid를 죽이고 마운트 해제를 다시 시도하십시오.

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

참고 :이 pid의 정확한 응용 프로그램 이름을 찾으려면이 명령을 사용할 수 있습니다

cat /proc/<pid>/cmdline

예를 들면 다음과 같습니다. cat /proc/11086/cmdline

다음과 같은 결과가 출력됩니다.

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

이것이 도움이되기를 바랍니다.


2
퓨저 -ck도 그것을 죽일 것입니다.
João Pinto

3
먼저 -9 옵션을 사용하지 않고 종료하면 해당 응용 프로그램이 완전히 종료 될 수 있습니다. 그리고 ps <pid>/ proc에서 파일을 편집 하는 대신 명령 이름과 인수를 보는 것이 좋습니다 .
Marius Gedminas

나는 그 과정을 찾기 위해 당신의 절차를 따릅니다, 그것은 Thunar-- 데몬입니다. 추가 정보를 제공하는 추가 문자가 없습니다. 나는 아직 그것을 죽이지 않았고, 그것이 다른 것에 달려있는 영향에 대해 걱정하고 있습니다.
기 illa 코트

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쓰기 와 같은 열기 모드를 나타냅니다.

파일이 열려있는 창을 찾을 수있는 기계적인 방법은 없습니다 (실제로는 기술적으로 의미가 없습니다. 프로세스에 여러 개의 창이있는 경우 파일이 특히 하나의 창과 연관되지 않음) 또는 간단한 식별 방법 프로세스의 창 (물론 프로세스에 창이있을 필요는 없습니다). 그러나 일반적으로 명령 이름과 파일 이름만으로 위반자를 찾고 파일을 올바르게 닫을 수 있습니다.

파일을 닫을 수없고 모든 파일을 끝내려면 kill 31421( 31421프로세스 ID가있는 곳 ) 또는 kill -HUP 31421(“멈춤”)으로 프로세스 를 종료 할 수 있습니다 . 일반 살인이 속임수를 쓰지 않으면 극단적 인 편견으로 죽이십시오 kill -KILL 31421.

lsof, glsof 용 GUI가 있지만 아직 준비가되지 않았으며 지금까지 우분투 용으로 패키지되지 않았습니다.

¹ Lsof는 다른 사용자의 프로세스에 대한 일부 정보를 나열 할 수 있지만 마운트 지점을 감지하지 않으므로 마운트 지점을 지정하면 나열되지 않습니다.
² 실행 코드는 종종 실행 형식에 대한 설명에서 텍스트라고합니다.


2

또한 이것은 도움이 될 수 있습니다.

lsof | grep \/media\/KINGSTON

4
슬래시를 벗어날 필요가 없습니다.
Marius Gedminas

확실치 않으면 인용 부호로 grep하십시오.grep "media/KINGSTON"
Adam Matan

2

한편 퓨저 명령이 훨씬 향상되었습니다. 단일 명령으로 전체 작업을 수행 할 수 있습니다.

$ 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.