파일을 잠그는 프로세스를 식별하는 방법은 무엇입니까?


35

잠금 파일을 사용하는 정확한 프로세스를 알고 싶습니다. 나는 그것을 고치고 싶지 않지만 내 시스템이 무엇을하고 있는지 알고 싶습니다. 어떻게 알 수 있습니까?

예를 들어이 메시지는 다음과 같습니다.

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

다시 말하지만, 나는 그것을 수정하는 방법이 아니라 프로세스를 사용하여 프로세스를 식별하고 싶습니다 .

답변:


38

악명이있다 lsof:

sudo lsof /var/lib/dpkg/lock
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
aptitude 4974 root    3uW  REG   8,23        0 815673 /var/lib/dpkg/lock

이 경우 적성은 파일을 사용하고 있습니다. 어떤 사용자가 파일을 잠그고 있는지 확실하지 않은 경우 루트를 사용해야합니다. 그것은 많은 것들에도 유용하며 슬프게도 Ubuntu와 함께 설치되지 않으므로 먼저 설치해야합니다.

나머지 필사자들에게는 fuser명령이 있습니다. 프로세스 이름 대신 PID 만 반환하므로 고유합니다.

➜  ~  sudo fuser /var/lib/dpkg/lock
/var/lib/dpkg/lock:   4974

여기서 파일과 PID (4974)는 누구인지 조사해야합니다.

➜  ~  ps 4974
  PID TTY      STAT   TIME COMMAND
 4974 pts/1    Sl+    0:06 aptitude

6
lsof악명 높은 이유는 무엇 입니까? 그것에 문제가 있습니까?
Ruslan

3
@Ruslan 그래, 그것은 실마리가없는 사용자가 시스템 관리자가 원하는 것과는 달리 시스템의 실제 사용법을 알 수있게 해줍니다 ...
Braiam

@Braiam 너무 많은 정보가 오른손에 위험한 일이 될 수 있습니까? ^ -_- ^
피터 데이비드 카터

한 줄에 두 번째 옵션 :ps $(sudo fuser /var/lib/dpkg/lock)
wjandrea 17

8

lslocks는 간단한 방법입니다.

lslocks |grep /var/lib/dpkg/lock

쉘을 사용하여 프로세스 ID를 처리하려면 다음을 수행하십시오.

for pid in `lslocks -rn | grep /var/lib/dpkg/lock|awk '{print $2}'`;
do 
    echo $pid; 
done

예. lslocks가장 좋은 방법입니다. 사용 lsof이 오류가 나에게 준 : "lsof를 경고 : 할 수 합계 () fuse.gvfsd 퓨즈 파일 시스템 / 실행 / 사용자 / 1000 / 출력 정보가 불완전 할 수 있습니다 GVFS"
탐색

@Nav 그것은 오류가 아니라 경고입니다.
브라이 암
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.