~しようとする
sudo apt update
しかし、以下を得る:
/var/lib/apt/lists/lockロックを取得できません - 開く(11:リソースを一時的に使用できません)
E: /var/lib/apt/lists/ ディレクトリをロックできません。
最新バージョンのmongodを入手しようとしています。私が見つけたいくつかの指示に従って、次のことを行いました。
$ ps aux | grep apt
5019 0.0 0.0 14224 980 pts/0 S+ 02:52 0:00 grep --color=auto apt
しかし、どの部分を入れるべきかわかりません。
kill -9 processnumber <id>
動作させる。
IDのどの部分ですか?このようなことが再発しないようにする方法はありますか?
答え1
名前または引数のリストに基づいてプロセスを終了するには、を使用しますpkill
。
pkill regexp
名前が拡張正規表現と一致するすべてのプロセスが終了しますregexp
。
pkill -f regexp
正規表現に一致するスペースで連結された引数のリスト(通常はコマンド名を含む最初のリストを含む)が終了するすべてのプロセスを終了します。
ただし、ここではロックされたファイルを保持しているプロセスを終了したいようです/var/lib/apt/lists/lock
。したがって、次のようになります。
fuser -k /var/lib/apt/lists/lock
(一部のフュージョンを使用して実装されています)または
lsof -t /var/lib/apt/lists/lock | xargs kill
より適切かもしれません。
lsof /var/lib/apt/lists/lock
まず、どのプロセスを使用しているかを確認したい場合がありますfuser /var/lib/apt/lists/lock
。可能であれば、冷静に殺すのではなく、正常に終了してください。
何を書いてもkill -9
プロセスがきちんと終了する機会を与えない状況は避けてください。
答え2
これはそれを使用しないでください2つの理由を示していますps … | grep …
。
ps
ヘッダー行を印刷します。ただし、出力がパイプで接続され、grep
grepパターンがヘッダー行と一致しないため、ヘッダー行は表示されません。ヘッダー行にという列が表示されますPID
。この列の値はに渡す必要がある値ですkill
。
ps … | grep …
通常、grepプロセスを実行すると、それ自体が一覧表示されます。あなたの場合、grepプロセスのみを見ることができます。 grepプロセスがランダムであることがわかりますか?パイプは並列に実行され、通常は実行中に開始する時間がありますが、時には非常に高速に実行され、まだps
起動していない場合があります。パターンが一致しないことを確認するなど、grepプロセスを見ないいくつかのヒントがあります。grep
grep
ps
ps
grep
ps aux | grep '[a]pt'
しかし、これを行うより安定した方法があります。 Linuxやその他のシステムでは、次のソフトウェアを提供しています。pgrep
。それは少し似て動作しますps … | grep …
が、より安定しています。
pgrep apt
プロセスに関する情報を取得するには、プロセスIDを次に渡すことができますps
。
ps $(pgrep apt)
すべて殺すには、pgrep
コマンドをに変更しますpkill
。これらのプロセスの一部のみを終了するには、pgrep
必要なプロセスにのみ一致するようにコマンドラインに追加の条件を追加するか、出力からPIDを手動で選択しますps
。
Linuxps
コマンドは、コマンド名を含むいくつかの基準に基づいてプロセスを一致させることができますが、正確な一致が必要ですが、部分pgrep
文字列とより一般的な正規表現の一致を見つけることができます。
ps -C apt # won't find e.g. apt-get
しかし、これは適切なロック問題を解決する最善の方法ではありません。バラよりStefan Chazerasの答えこのために。