나는 ~하려고 노력한다
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>
작동하게 만들다.
신분증의 어떤 부분인가요? 이런 일이 다시 발생하지 않도록 할 수 있는 방법이 있나요?
답변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
이는 이를 사용하지 말아야 하는 두 가지 이유를 보여줍니다 ps … | grep …
.
ps
머리글 행을 인쇄합니다. 그러나 출력이 파이프로 연결 grep
되고 grep 패턴이 헤더 행과 일치하지 않으므로 헤더 행이 표시되지 않습니다. 헤더 행에 라는 열이 표시됩니다 PID
. 이 열의 값은 에 전달해야 하는 값입니다 kill
.
ps … | grep …
일반적으로 grep 프로세스를 실행할 때 그 자체가 나열됩니다. 귀하의 경우 grep 프로세스만 볼 수 있습니다. grep 프로세스가 무작위라는 것을 알 수 있습니까? 파이프는 병렬로 실행되며 ps
일반적 grep
으로 grep
실행되는 동안 시작할 시간이 있지만 ps
때로는 ps
매우 빠르게 실행되어 grep
아직 시작되지 않은 경우도 있습니다. 패턴이 일치하지 않는지 확인하는 등 grep 프로세스를 보지 않는 몇 가지 요령이 있습니다.
ps aux | grep '[a]pt'
하지만 이를 수행하는 더 안정적인 방법이 있습니다. Linux 및 기타 시스템에서는 다음과 같은 소프트웨어를 제공합니다.pgrep
. 그것은 약간 비슷하게 작동 ps … | grep …
하지만 더 안정적입니다.
pgrep apt
프로세스에 대한 정보를 얻으려면 프로세스 ID를 다음으로 전달할 수 있습니다 ps
.
ps $(pgrep apt)
모두 죽이려면 pgrep
명령을 로 변경하십시오 pkill
. 이러한 프로세스 중 일부만 종료하려면 pgrep
원하는 프로세스에만 일치하도록 명령줄에 더 많은 조건을 추가하거나 출력에서 PID를 수동으로 선택하세요 ps
.
Linux ps
명령은 명령 이름을 포함한 여러 기준에 따라 프로세스를 일치시킬 수도 있지만 정확한 일치가 필요하지만 pgrep
하위 문자열 및 보다 일반적인 정규식 일치를 찾을 수 있습니다.
ps -C apt # won't find e.g. apt-get
그러나 이는 적절한 잠금 문제를 해결하는 최선의 방법은 아닙니다. 바라보다Stefan Chazeras의 답변이를 위해.