ファイルをロックするプロセスを識別する方法は?


34

ロックファイルを使用している正確なプロセスを知りたい。私はそれを修正したくありませんが、私のシステムが何をしているかを知りたいだけです。どうすればわかりますか?

たとえば、次のメッセージ:

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

この場合、aptitudeはファイルを使用しています。どのユーザーがファイルをロックしているかわからない場合は、rootを使用する必要があります。たくさんのことにも役立ちますが、残念ながら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悪名高いのですか?それにいくつかの問題はありますか?
ルスラン14年

3
うん@Ruslan、それは...無知、ユーザーがシステム管理者が望んでいることに反しシステムの実際の使用状況を知ることができます
Braiam

@Braiam情報が多すぎると危険です。^ -_- ^
ピーターデビッドカーター

1行目の2番目のオプション:ps $(sudo fuser /var/lib/dpkg/lock)
wjandrea

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を:WARNING:statをすることはできません()fuse.gvfsdヒューズファイルシステム/実行/ユーザー/ 1000 / GVFS出力情報が不完全な場合があります」
ナビ

@Navはエラーではなく、警告です。
Braiam
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.