프로세스 잠금 파일을 나열하는 방법?


51

를 사용하여 flock여러 프로세스가 동시에 공유 잠금을 갖거나 쓰기 잠금을 획득하기 위해 대기 할 수 있습니다. 이러한 프로세스 목록을 어떻게 얻습니까?

즉, 주어진 파일 X의 경우 파일에 대한 잠금을 보유하거나 대기중인 각 프로세스의 프로세스 ID를 찾는 것이 이상적입니다. 잠금을 기다리는 프로세스 수를 얻는 것만으로도 좋은 시작이 될 것입니다.

답변:


42

lslocks의에서 폴더의 유틸리티 - 리눅스 패키지 , 정확히이 일을합니다.

에서 MODE열 잠금을 기다리는되는 프로세스 것은으로 표시됩니다 *.


3
Apt-cache는 util-linux가 이미 최신 버전 (2.20.1-1ubuntu3)이라고 말하지만 lslocks는 없습니다. 내가 사용할 수있는 레포가 있습니까?
Benubird

2
이것은 2.22에 추가 된 것으로 보이므로 우분투 버전이 너무 오래되었습니다. 아마도 새로운 버전이 출시 될 것입니다. RHEL 6 또는 CentOS에서도 마찬가지입니다. 직접 빌드하거나 lsofJoel Davis가 제안한 방식을 사용할 수 있습니다 .
mattdm

6
lslocksreads /proc/locks는 파일을 이름이 아닌 장치와 inode로 식별한다는 경고와 함께 직접 읽을 수 있습니다. 파일을 알고 있으므로 문제가되지 않습니다. 차단 된 항목에는 ->잠금 유형 열 앞에 접두사 가 붙습니다 (따라서 해당 행에 열 추가).
mr.spuratic

27

두 가지 가능성 : lsof(내 환경 설정) 또는 lslk(특히 파일 잠금의 경우) :

[root@policyServer ~]# lslk | grep "master.lock"
SRC          PID   DEV  INUM   SZ TY M   ST WH  END LEN NAME
master      1650 253,0 12423   33  w 0    0  0    0   0 /var/lib/postfix/master.lock

[root@policyServer ~]# lsof | grep "master.lock"
master     1650      root   10uW     REG              253,0       33      12423 /var/lib/postfix/master.lock

lslk의 출력은 자체 확장 적이지만 lsof잠금 설명을 "FD"열 ( 10uW위)에 넣습니다 . 매뉴얼 페이지에서 :

The mode character is followed by one of these lock characters, describing the type of lock applied to the file:

N for a Solaris NFS lock of unknown type;
r for read lock on part of the file;
R for a read lock on the entire file;
w for a write lock on part of the file;
W for a write lock on the entire file;
u for a read and write lock of any length;
U for a lock of unknown type;
x for an SCO OpenServer Xenix lock on part      of the file;
X for an SCO OpenServer Xenix lock on the      entire file;
                       space if there is no lock.

따라서 위의 "FD"열은 다음과 lsof같이 분류됩니다.

10이 열린 파일의 리터럴 설명자입니다. 에 의해 연결되는 것/proc/1650/fd/10

u 읽고 쓸 수있는 파일이 열려 있습니다

W 프로그램에 파일에 대한 쓰기 잠금이 있습니다.


1
lslk를 얻을 수있는 곳을 찾을 수 없으며 더 이상 유지 관리되지 않는 것 같습니다. lsof가 실제로 파일을 잠그는 프로세스 만 표시하려면 "^ mutex"를 grep해야한다는 점도 지적해야합니다. 또한 '보류'와 '차단'을 구분하지 않습니다.
Benubird

FD 필드의 첫 번째 문자는 파일이 열린 파일입니다 (필요한 것으로 가정합니다) 선택적 두 번째 문자는 파일에있는 잠금 (있는 경우)입니다. m은 "차단"이라는 의미 flock입니다. 또한 ! = 뮤텍스. 귀하의 GREP이 포스트에서처럼 잠금을 놓친 것 (첫 번째 필드를 언급하지 않기 ... 프로그램 이름)
Bratchley

도! 당신이 맞습니다- "mutex"는 내 스크립트의 이름이므로 'mutex'에 대한 grepping은 제 경우에만 적용됩니다. 지적 해 주셔서 감사합니다
Benubird

내가 boo-boo를 만든 것처럼 보인다 : "첫 글자 문자는 파일을 연 모드이다 ..."
Bratchley

5

lsof는 파일 목록을 보는 데 도움이 될 수 있습니다. 잠긴 파일을 보는 방법은 다음과 같습니다.

sudo lsof /var/lib/dpkg/lock 

0

lsof시스템 자체가 누락 된 경우 ls /proc/*/fd/* | grep LOCK_FILE_NAME동일한 정보를 제공해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.