Mac에서 프로세스 잠금 포트 3000 찾기 및 죽이기


1808

내 tcp 포트를 청취 / 사용하는 프로세스를 어떻게 찾아서 죽이나 요? Mac OS X에 있습니다.

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

할 때

rails server

나는 얻다

이미 사용중인 주소-bind (2) (Errno :: EADDRINUSE)

2014 년 업데이트 :

아래의 답변 중 일부를 완료하려면 kill 명령을 실행 한 후 pid 파일을 삭제해야합니다. rm ~/mypath/myrailsapp/tmp/pids/server.pid


25
모든 사용자 지정 포트에서 프로세스를 종료하는 매우 깔끔한 솔루션은 아래 @Kevin Suttle의 답변에서 찾을 수 있습니다. 후손을 위해 여기에서 재현 :function killport() { lsof -i TCP:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9 }
user456584

4
포트 3000은 '높은 레일 개발 전용'이 아닙니다. Meteor는 기본적으로 3000에서도 실행되며 다른 것도 있습니다.
gregorvand

위 @ user456584의 코멘트 기능이 죽일 일한 ^^^ 허용 대답해야 많은 내가 포트에서 실행 한 프로세스
Aneuway

답변:


3023
  1. 당신은 시도 할 수 있습니다 netstat

    netstat -vanp tcp | grep 3000
    
  2. 대한 맥 OS 엘 캐피 탄 과 새 (또는 NETSTAT이 지원하지 않는 경우 -p), 사용lsof

    sudo lsof -i tcp:3000 
    
  3. 대한 CentOS의 7 사용

    netstat -vanp --tcp | grep 3000
    

22
감사합니다! 당신의 대답은 "death_to 'port" "스크립트를 낳았습니다. (#! / usr / bin / ruby lsof -t -i tcp:#{ARGV.first} | xargs kill)
Sv1

191
lsof에 대한 "terse"플래그는 후속 lsof -t -i tcp:1234 | xargs kill
Manav

5
나는 이것을 내 안에 넣었다 ~/.bash_profile. findandkill() { port=$(lsof -n -i4TCP:$1 | grep LISTEN | awk '{ print $2 }') kill -9 $port } alias killport=findandkill그래서 이제는 타이핑 killport 8080을하면 몇 초만 절약된다
Alfonso Pérez

3
또 다른 팁 : sudo출력이 보이지 않으면 lsof 전에 시도 하십시오
Abe Petrillo

4
또 다른 팁은 출력에 원시 포트가 표시되도록 명령 에 추가 -P하는 것입니다 lsof.lsof -P -i:3000
Jason Axelson

1874

찾기:

sudo lsof -i :3000

죽임:

kill -9 <PID>

61
때때로 lsof -i : port 는 아무것도 표시하지 않습니다. sudo lsof -i : port 시도하십시오 .
kilik52

31
안전을 kill -15 <PID>의지하기 전에 시도해 보는 것이 -9좋습니다.
Jamon Holmgren

7
@Jamon Holmgren 왜? 둘 다 무엇을합니까? 왜 kill <PID>충분하지 않은 / 위험한 / 불완전한가?
Michael Trouw

13
거의 1 년 후에 @MichaelTrouw가 있지만 여기에 귀하의 답변이 있습니다. :-) unix.stackexchange.com/a/8918 TL; DR kill -15은 프로세스 자체를 정리할 수있는 기회를 제공합니다.
Jamon Holmgren

9
나는이 대답이 무엇을 말해야한다고 생각합니다 -9.
Joseph Fraley

206

위의 어느 것도 나를 위해 일하지 않았습니다. 내 경험이있는 다른 사람은 다음을 시도 할 수 있습니다 (나를 위해 일함).

운영:

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

그런 다음보고 된 PID의 상태를 확인하십시오.

ps ax | grep <PID>

마지막으로 "그것과 함께 시작":

kill -QUIT <PID>

18
이것은 실제로 Filip Spiridonov가 9 번에 대해 277 건의 찬성 투표를 한 것보다 더 나은 답변 인 것 같습니다. 정의가 없습니다 ...
Floris

전에 kill -TERM(또는 그냥 kill) 시도하십시오 kill -QUIT. 모든 프로세스가 SIGQUIT에서 순차적으로 종료되는 것은 아닙니다.
craig65535

159

포트 3000을 사용하여 프로세스의 PID를 추출하여 종료하는 단일 라이너.

lsof -ti:3000 | xargs kill

-t 플래그는 lsof 출력에서 ​​PID를 제외한 모든 것을 제거하므로 쉽게 종료 할 수 있습니다.


13
다음과 같이 "청취"포트를 필터링 할 수 있습니다.lsof -ti:3000 -sTCP:LISTEN
Zlemini

1
이 방법은 나에게 가장 효과적입니다. 사용중인 포트를 지우는 간단한 하나의 라이너. 감사!
Ryan Trainor

137

가장 쉬운 솔루션 :

단일 포트의 경우 :

kill $(lsof -ti:3000)  #3000 is the port to be freed

한 줄 명령으로 여러 포트를 종료하십시오.

kill $(lsof -ti:3000,3001)  #here multiple ports 3000 and 3001 are the ports to be freed

lsof -ti : 3000

82500 (프로세스 ID / PID)

lsof -ti : 3001

82499

lsof -ti : 3001,3000

82499 82500

죽이기 $ (lsof -ti : 3001,3000)

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

package.json스크립트 에서 이것을 사용하려면 :

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


2
이것은 나를 위해 일했습니다 감사합니다 :)
DILEEP THOMAS

2
도움이되어 다행입니다.
Abhijith Sasikumar

113

이 단일 명령 행은 기억하기 쉽습니다.

npx kill-port 3000

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

npx fkill-cli


추신 : 그들은 타사 자바 스크립트 패키지를 사용합니다. npxNode.js에 내장되어 있습니다.

출처 : 트윗 | 깃 허브


brew를 사용하여 npx 설치에 대한 세부 정보를 공유 할 수 있습니까? Mac High Sierra, 10.13.3에 설치하려고 시도했지만 작동하지 않습니다.
realPK

@realPK는와 npx함께 npm제공 node.js되므로 별도의 패키지가 아닙니다. node.js와 npm 버전을 업그레이드하십시오.
Bruno Lemos

나는 주로 Java를하고 아직 노드에 노출되지 않았습니다. 포트에서 실행되는 다른 서비스 종료 방법을 찾았습니다. 응답을위한 TY.
realPK

5
포트 3000에서 실행중인 것을 죽이려면 NodeJS와 JavaScript가 필요합니다. 아마도 너무 오버 헤드 인 것 같습니다. 별칭을 사용하여 .bashrc 또는 .zshrc에 간단한 줄을 추가하면 인터넷이 없어도 해결할 수 있습니다. alias kill3000 = 'lsof -ti : 3000 | xargs kill '그러면 다음을 수행 할 수 있습니다. kill3000
Khalil Gharbaoui

이 문제의 최상의 해결책. 감사합니다
King Rayhan

107

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

바로 "List Open Files"입니다. 프로세스 목록과 이들이 사용하는 파일 및 포트 목록이 제공됩니다.


나는 10.5 표범 (Q 업데이트)에 있습니다. 이것이 중요한지 모르겠지만 lsof는 포트를 표시하지 않습니다. lsof -h (lsof 4.78)는 너무 비밀 스럽습니다 ...
oma

1
흠. Leopard에 대해 잘 모르지만 시도해보십시오 ( 뿌리 -중요 lsof -i:3000합니다.)
매트 깁슨

59

당신에 .bash_profile대한 바로 가기를 만들 terminate3000 개 과정 :

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

그런 다음 $terminate차단되어 있으면 전화 하십시오.


12
: 당신은 모든 포트에 대해이 유연 충분히 할 수 github.com/kevinSuttle/dotfiles/commit/...
케빈 Suttle

그리고 그러한 묘사적인 이름 = p
Michael Peterson

나는 이것과 비슷한 것이 있지만 항구를지나갑니다. 킬 포트의 함수 KP를 명명했습니다.
조셉 챔버

58

이와 같은 프로세스를 강제로 종료하려면 다음 명령을 사용하십시오.

lsof -n -i4TCP:3000 

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

이것은 프로세스 id (PID)를 반환하고 실행

kill -9 "PID"

PID를 첫 번째 명령을 실행 한 후 얻은 숫자로 바꿉니다.

인스턴스의 경우 포트 8080에서 실행중인 프로세스를 종료하려면


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

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


10
MAC에서 포트 3000의 모든 pid를 강제 종료합니다. lsof -P | grep ': 3000'| awk '{print $ 2}'| xargs kill -9
mike clagg

1
둘 이상의 프로세스가 동일한 포트를 청취 할 수 있습니까?
Kris

우리의 레일 앱은 아동 프로세스 인 근로자를 생성하며 고아 근로자를 죽이려면 이것을 사용해야합니다.
mike clagg

2
이것은 또한 포트에 연결하는 웹 브라우저를 죽입니다
fjsj

5
lsof -n -iTCP:3407 -sTCP:LISTEN -n -l -P | grep 'LISTEN' | awk '{print $2}' | xargs kill -9
bob

29

OS-X El Captain의 명령 행에서 실행하십시오.

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

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


28

포트에서 프로세스를 종료하는 방법 중 하나는 파이썬 라이브러리를 사용하는 것입니다 : 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

7
그것은 가장 간단한 방법은 아닙니다. 찬성 된 답글은 다운로드하거나 설치할 필요가 없습니다.
Greg Pasquariello

4
전제 조건이 충족되면 이는 매우 단순하고 기억하기 쉽습니다. 우리는 "가장 단순하다"는 다른 정의를 가지고 있으며이 답변은 완벽하게 유효하고 적절합니다. 어쩌면 pip로 freeport를 설치하는 지침이 누락되었을 수 있습니다.
Cyril Duchon-Doris

후드 아래에서 freeport는 단지 lsof -t -i:3000.. 를 호출하는 래퍼입니다 .
코리 골드버그

이 솔루션은 가장 쉬운 방법은 아니지만 OP가 요청한 내용과 100 %를 준수합니다. 따라서 유효한 AF 상태입니다.
danielrvt

26

포트를 차단하는 프로세스를 보려면

netstat -vanp tcp | grep 3000

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

kill $(lsof -t -i :3000)


이것은 맥 컴퓨터에서는 작동하지 않으며 다음을 반환합니다. kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]그러나 대부분의 리눅스 배포판에서는 작동합니다
Milan Velebit

1
@MilanVelebit 사실 내 Mac 컴퓨터 (Sierra)에서 완벽하게 작동합니다. 포트 3000가 사용 중이 면 제대로 작동합니다 . 그러나 프로세스가 포트를 차단하지 않으면 kill: not enough arguments오류가 발생합니다.
헨리

그것은 이상하다. 나는 두 개의 맥 (High Sierra tho)을 가지고있다. 나는 두 명령 모두에서 명령을 실행하는 것을 기억한다 (구 습관). 포트가 점유되어 있음을 알면서도 내 컴퓨터에서 다시 시도했지만 동일한 오류가 발생했습니다. : /
Milan Velebit

netstat -vanp tcp | grep 3000점유 된 포트 에 대해 유효한 PID 실행을 했습니까 ?
헨리

1
나는 쉘 bashzsh쉘 모두에서 시도했다 . 나를 위해 잘 작동합니다. 왜 작동하지 않는지 잘 모르겠습니다. High Sierra와 관련이있을 수 있습니까? 나는 전혀 모른다 : /
Henry Henry

24

열린 연결 찾기

lsof -i -P | grep -i "들으십시오"

프로세스 ID로 종료

-9 'PID'죽이기


20

찾아서 죽이십시오 :

이 단일 명령 행은 쉽고 정확합니다.

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

14

이것을 달성하는 가능한 방법 :

상단

top 명령은 시스템의 리소스 사용량을보고 가장 많은 시스템 리소스를 차지하는 프로세스를 보는 전통적인 방법입니다. Top은 가장 많은 CPU를 사용하는 프로세스 목록을 표시합니다.

추신

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

ps -A

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

ps -A | grep firefox

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

kill PID_of_target_process

lsof

열려있는 모든 파일 및이를 연 프로세스 목록.

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

또는

 lsof -i tcp:3000 

10

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

kill -9 PID -과정을 죽일 것이다

당신의 경우에는

lsof -i tcp:3000 터미널에서 프로세스의 PID를 찾으십시오.

kill -9 PID



5

추가 ~/.bash_profile:

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

그런 다음 source ~/.bash_profile실행

killTcpListen 8080



4

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 만 표시하는 데 사용할 수 있습니다 . 이것을 -t간결한 형식 과 결합 하면 프로세스를 자동으로 종료 할 수 있습니다.

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

4

나는 당신의 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)rails 루트 디렉토리에서 입력 할 수 있습니다


\$PORT메시지를 올바르게 표시 하려면 백 슬래시를 사용해야 했습니다. 그렇지 않으면 훌륭하게 작동합니다!
ashwood

4

다중 포트를 종료합니다.

$ npx kill-port 3000 8080 8081

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

이 도움을 바랍니다!


1

이 기술은 OS 독립적입니다.

응용 프로그램에는 tmps라는 폴더가 있으며 그 안에는 pids라는 다른 폴더가 있습니다. 이 파일에는 서버 pid 파일이 포함되어 있습니다. 해당 파일을 삭제하십시오. 포트가 자동으로 종료됩니다.

나는 이것이 쉬운 방법이라고 생각합니다.


1

다음은 이름이나 포트로 여러 프로세스를 종료하는 도우미 bash 함수입니다.

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

1

당신은 이것을 시도 할 수 있습니다

netstat -vanp tcp | grep 3000

0

코드 자유 방식을 원할 경우 활동 관리자를 열고 강제 종료 노드를 선택하십시오. :)



-1

1 단계 : 실행중인 서버 찾기 : ps aux | grep puma 2 단계 : 해당 서버 죽이기 Kill -9 [서버 번호]


-1

맥 OS에서

kill -9 $(lsof -i TCP:3000 | grep LISTEN | awk '{print $2}')


1
이것은 5 년 전에 코멘트로 게시되었으며, 비슷한 답변이 여러 번 게시되었습니다.
Gilles Gouaillardet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.