programing

Mac에서 프로세스 잠금 포트 3000 찾기(및 제거)

subpage 2023. 5. 29. 10:53
반응형

Mac에서 프로세스 잠금 포트 3000 찾기(및 제거)

TCP 포트를 수신/사용하는 프로세스를 어떻게 찾습니까?저는 macOS 중입니다.

때때로 충돌이나 버그가 발생한 후 Rails 앱이 포트 3000을 잠그는 경우가 있습니다.를 사용하여 찾을 수 없습니다.ps -ef...

실행 시

rails server

알겠습니다

Address already in use - bind(2) (Errno::EADDRINUSE)

Node.js 프로세스를 중지할 때도 동일한 문제가 발생합니다.프로세스가 중지되고 앱 실행이 중지된 후에도 포트3000잠겼습니다.앱을 다시 시작할 때, 다음과 같은 정보를

Address already in use (Errno::EADDRINUSE)
  1. 시도해 보세요netstat

    netstat -vanp tcp | grep 3000
    
  2. macOS El Capitan 이상(또는 netstat가 지원하지 않는 경우)-p), 사용lsof

    lsof -i tcp:3000
    

찾기:

sudo lsof -i :3000

킬:

kill -9 <PID>

참고: -9프로세스를 즉시 중지하고 프로세스 자체를 정리할 기회를 주지 않습니다.문제가 발생할 수 있습니다.사을고려다니합을 사용하는 것을 .-15 (TERM) 또는-3(QUIT) 프로세스가 자동으로 정리될 수 있도록 보다 부드러운 종료를 제공합니다.

빠르고 쉬운 솔루션:

kill -9 $(lsof -ti:3000)

여러 포트의 경우:

kill -9 $(lsof -ti:3000,3001)

#3000은 해방될 포트입니다.

한 줄 명령으로 여러 포트를 죽입니다.

kill -9 $(lsof -ti:3000,3001)

#여기서 다중 포트 3000 및 3001은 해제할 포트입니다.

ls of -ti:3000

포트가 사용 중인 경우 위의 명령은 다음과 같은 것을 반환합니다. 82500(프로세스 ID)

ls of -ti:3001

82499

ls of -ti:3001,3000

82499 82500

킬 -9달러 (ls of -ti:3001,000)

단일 명령으로 82499 및 82500 프로세스를 모두 종료합니다.

에서 사용하기 .package.json스크립트:

"scripts": {
   "start": "kill -9 $(lsof -ti:3000,3001) && npm start"
}

터미널에서 다음을 사용할 수 있습니다.

npm run start

위의 어떤 것도 저에게 효과가 없었습니다.제 경험이 있는 다른 사람은 다음을 시도할 수 있습니다(저를 위해 일했습니다).

실행:

lsof -i :3000 (where 3000 is your current port in use)

그런 다음 보고된 PID의 상태를 확인합니다.

ps ax | grep <PID>

마지막으로, "그것으로 마무리":

kill -QUIT <PID>

이 단일 명령줄은 쉽게 기억할 수 있습니다.

npx kill-port 3000

여러 포트를 동시에 종료할 수도 있습니다.

npx kill-port 3000 3001 3002

검색 기능이 있는 보다 강력한 도구:

npx fkill-cli


PS: 그들은 타사 자바스크립트 패키지를 사용합니다. npxNode.js와 함께 제공됩니다.

출처: 트윗 | github.

포트 3000을 사용하여 프로세스의 PID를 추출하고 제거하는 원라이너.

lsof -ti:3000 | xargs kill

-t 플래그는 출력 ls에서 PID를 제외한 모든 항목을 제거하므로 쉽게 삭제할 수 있습니다.

사용할 수 있습니다.lsof -i:3000.

그것은 "열린 파일 나열"입니다.그러면 프로세스 목록과 프로세스가 사용하는 파일 및 포트가 표시됩니다.

이러한 프로세스를 강제로 종료하려면 다음 명령을 사용합니다.

lsof -n -i4TCP:3000  

OR lsof -i:3000

여기서 3000은 프로세스가 실행 중인 포트 번호입니다.

프로세스 ID(PID)와 실행을 반환합니다.

kill -9 "PID"

PID를 첫 번째 명령을 실행한 후 얻은 숫자로 바꾸기

예를 들어 포트 8080에서 실행 중인 프로세스를 중지하려면

왜 작동하지 않습니까?PID를 사용하여 프로세스를 중지하려고 하는데 다른 PID에서 실행되고 있으면 다른 계정에서 프로세스를 시작한 것처럼 보입니다. 따라서 로그인하십시오.sudo su요.

의 신의에서..bash_profile의바가만기들의 바로 .terminate 프로세스3000 설정:

terminate(){
  lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
}

다음, 럼그, 콜콜로 전화하세요.$terminate막히면 됩니다.

다중 포트를 죽입니다.

$ npx kill-port 3000 8080 8081

Process on port 3000 killed
Process on port 8080 killed
Process on port 8081 killed

이것이 도움이 되길 바랍니다!

lsof -P | grep ':3000' | awk '{print $2}'

이것은 MacOS에서 테스트된 pid를 제공합니다.

OS-X El 캡틴의 명령줄에서 실행:

kill -kill `lsof -t -i tcp:3000`

lsof의 Terse 옵션은 PID만 반환합니다.

포트에서 프로세스를 종료하는 방법 중 하나는 python 라이브러리: freeport(https://pypi.python.org/pypi/freeport/0.1.9) . 설치가 완료되면 다음과 같이 간단히 수행합니다.

# install freeport
pip install freeport

# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully

포트를 차단하는 프로세스를 보려면 다음과 같이 하십시오.

netstat -vanp tcp | grep 3000

포트를 차단하는 프로세스를 종료하려면:

kill $(lsof -t -i :3000)

찾기 및 죽이기:

이 단일 명령줄은 쉽고 올바르게 작동합니다.

kill -9 $(lsof -ti tcp:3000)

열린 연결 찾기

ls of -i -P | grep -i "듣기"

프로세스 ID별 킬

kill -9 'PID'

이를 위한 가능한 방법:

정상

top 명령은 시스템의 리소스 사용량을 확인하고 시스템 리소스를 가장 많이 사용하는 프로세스를 확인하는 전통적인 방법입니다.상단에는 CPU를 가장 많이 사용하는 프로세스가 상단에 있는 프로세스 목록이 목록이 표시됩니다.

ps

ps 명령은 실행 중인 프로세스를 나열합니다.다음 명령은 시스템에서 실행 중인 모든 프로세스를 나열합니다.

ps -A

또한 출력을 grep를 통해 파이프로 연결하여 다른 명령을 사용하지 않고 특정 프로세스를 검색할 수 있습니다.다음 명령은 Firefox 프로세스를 검색합니다.

ps -A | grep firefox

프로그램에 신호를 전달하는 가장 일반적인 방법은 kill 명령을 사용하는 것입니다.

kill PID_of_target_process

이 없는

열려 있는 모든 파일과 파일을 연 프로세스의 목록입니다.

lsof -i -P | grep -i "listen"
kill -9 PID

또는

 lsof -i tcp:3000 

lsof -i tcp:port_number해당 포트에서 실행 중인 프로세스를 나열합니다.

kill -9 PID그 과정을 죽일 것입니다.

당신의 경우에는, 그렇게 될 것입니다.

lsof -i tcp:3000터미널에서 프로세스의 PID를 찾습니다.

kill -9 PID

이것을 위해 작은 기능을 만들었는데, 당신의 rc 파일에 추가하세요 (.bashrc,.zshrc또는 무엇이든)

function kill-by-port {
  if [ "$1" != "" ]
  then
    kill -9 $(lsof -ni tcp:"$1" | awk 'FNR==2{print $2}')
  else
    echo "Missing argument! Usage: kill-by-port $PORT"
  fi
}

그러면 그냥 입력하시면 됩니다.kill-by-port 3000레일 서버를 죽입니다(실행 중인 포트에 대해 3000을 할당합니다).

그것이 실패하면, 당신은 항상 입력할 수 있습니다.kill -9 $(cat tmp/pids/server.pid)레일 루트 디렉터리에서

이 두 가지 명령은 서버 프로세스를 찾고 종료하는 데 도움이 됩니다.

  1. ls of -wni tcp:3000
  2. 킬 -9 pid
kill -9 $(lsof -ti:3000)

MacOS에서는 항상 작동합니다.

node.js 프로젝트를 수행하는 경우 패키지에 추가할 수 있습니다.json 스크립트는 다음과 같습니다;

"scripts": {
    ...
    "killme": "kill -9 $(lsof -ti:3000)",
    ...
  },

그리고나서

npm run killme

--

또한 macOS에 시스템 전체 별칭을 추가하려면 다음 단계를 수행합니다.

홈 디렉토리로 이동합니다.

cd ~

nano 또는 vim을 사용하여 .bash_profile 또는 zsh 프로파일을 엽니다.

vi .bash_profile

별칭 추가( i 누름):

alias killme="kill -9 $(lsof -ti:3000)"

파일 저장

터미널 다시 시작

유형killme종착역까지

물론 포트 3000을 원하는 대로 변경할 수 있습니다.

에 추가~/.bash_profile:

function killTcpListen () {
  kill -QUIT $(sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
}

그리고나서source ~/.bash_profile그리고 실행

killTcpListen 8080

sindresorhusfkill 도구를 사용하여 다음을 수행할 수 있습니다.

$ fkill :3000

노드 종료(Mac OS Catalina)에 적합합니다.

killall -9 node

TL;DR:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill

포트를 사용하는 클라이언트와 서버가 모두 있는 경우:

$ lsof -i tcp:3000
COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node       2043 benjiegillam   21u  IPv4 0xb1b4330c68e5ad61      0t0  TCP localhost:3000->localhost:52557 (ESTABLISHED)
node       2043 benjiegillam   22u  IPv4 0xb1b4330c8d393021      0t0  TCP localhost:3000->localhost:52344 (ESTABLISHED)
node       2043 benjiegillam   25u  IPv4 0xb1b4330c8eaf16c1      0t0  TCP localhost:3000 (LISTEN)
Google    99004 benjiegillam  125u  IPv4 0xb1b4330c8bb05021      0t0  TCP localhost:52557->localhost:3000 (ESTABLISHED)
Google    99004 benjiegillam  216u  IPv4 0xb1b4330c8e5ea6c1      0t0  TCP localhost:52344->localhost:3000 (ESTABLISHED)

그럼 둘 다 죽이고 싶지 않을 겁니다

이 경우 사용할 수 있습니다.-sTCP:LISTEN수신 중인 프로세스의 pid만 표시합니다.이것과 그것을 결합하는 것.-tterse 형식 프로세스를 자동으로 종료할 수 있습니다.

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill

이름 또는 포트별로 여러 프로세스를 제거하는 도우미 배시 함수입니다.

fkill() {
  for i in $@;do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n '1!p';
  else ps aux|grep -i $i|grep -v grep;fi|awk '{print $2}'|\
  xargs -I@ sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

용도:

$ fkill [process name] [process port]

예:

$ fkill someapp :8080 node :3333 :9000

해보세요.

netstat -vanp tcp | grep 3000

사용자:

lsof -wni tcp:3000

PID를 가져오고, 다음을 수행합니다.

kill -9 <PID>

내가 좋아하는 원라이너:sudo kill `sudo lsof -t -i:3000`

Mac에서 포트 3000을 제거하려면 다음 명령을 실행합니다.

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)

언급URL : https://stackoverflow.com/questions/3855127/find-and-kill-process-locking-port-3000-on-mac

반응형