Mac의 터미널에서 열린 포트를 어떻게 닫습니까?


199

클라이언트와 통신하기 위해 Java 클래스에서 포트 # 5955를 열었습니다. 완료 후이 포트를 어떻게 닫습니까? 또한 포트가 열려 있거나 닫혀 있으면 어떤 명령이 표시 될 수 있습니까?


1
그 포트를 어떻게 열었습니까? Java 응용 프로그램 또는 방화벽에서 포트를 열고 닫는 것에 대해 이야기하고 있는지 확실하지 않습니다.
mariosangiorgio

답변:


398
  1. 해제하려는 포트 번호 (예 : 5955)를 차지하는 프로세스 ID (PID)를 찾으십시오.

    sudo lsof -i :5955
    
  2. PID를 사용하여 현재 포트를 사용중인 프로세스를 종료하십시오.

    sudo kill -9 PID
    

33
-9를 보내는 것이 프로세스를 죽이는 첫 번째 시도는 아니며 매우 나쁜 습관입니다. 내가 기억하는 것처럼, 먼저 kill PID-15를 의미하는 -2와 -1을 사용해보십시오. -9는 다른 모든 옵션이 작동하지 않는 경우에만 최후의 수단 입니다.
Meow

3
@Meow 제안이 나를 위해 일한으로 어떤 플래그없이 죽 PID를했다
토니 리

40

프로세스를 찾으려면 다음을 수행하십시오.

sudo lsof -i :portNumber

PID를 사용하여 현재 포트를 사용중인 프로세스를 종료하십시오.

kill PID

포트가 닫혔는지 확인하십시오. 그렇지 않은 경우 다음을 시도하십시오.

kill -9 PID

이전에 작동하지 않은 경우에만 다음을 수행합니다.

sudo kill -9 PID

안전합니다. 포트를 여는 방법에 따라이 문제는 중요하지 않을 수 있습니다.


26

그러나 포트를 열었을 때 같은 방식으로 닫습니다. 예를 들어, 소켓을 작성하여 포트 0.0.0.0:5955에 바인드하고 청취라고하는 경우 동일한 소켓을 닫으십시오.

포트가 열린 프로세스를 종료 할 수도 있습니다.

포트가 열려있는 프로세스를 찾으려면 다음을 시도하십시오.

lsof -i :5955

포트가 열려 있는지 확인하려면 동일한 lsof 명령을 수행하거나 (프로세스가 열려 있으면 열려 있고 그렇지 않은 경우) 아니면 연결하려고 할 수 있습니다 (예 :

nc localhost 5955

출력없이 즉시 반환되면 포트가 열려 있지 않은 것입니다.

기술적으로 말해서 개방 된 포트가 아니라 호스트 : 포트 조합입니다. 예를 들어 LAN에 10.0.1.2로 연결된 경우 소켓을 다른 소켓에 영향을주지 않고 127.0.0.1:5955 또는 10.0.1.2:5955에 소켓을 바인딩하거나 0.0.0.0에 바인딩 할 수 있습니다. : 5955를 동시에 처리합니다. 이 ifconfig명령으로 컴퓨터의 모든 IPv4 및 IPv6 주소를 볼 수 있습니다 .


24

매우 간단한 포트 5900 찾기 :

sudo lsof -i :5900

그런 다음 59553을 PID로 고려하십시오.

sudo kill 59553

1
이것은 기존 답변에 아무것도 추가하지 않습니다!
hatef

16

2018 년에 MacOS HighSierra를 사용하여 나를 위해 일한 것은 다음과 같습니다.

sudo lsof -nPi : yourPortNumber

그때:

sudo kill -9 yourPID 번호


1
lsof -nPi포트 번호가 실제로 출력에 표시되고 죽이는 것에 대한 느낌이 좋아지기 때문에 약간 더 좋습니다.
Rich Stone

1
모든 청취 포트의 정보를 보는 것도 도움이됩니다 :sudo lsof -nPi | grep LISTEN
leanne

15

하나의 라이너가 최고

kill -9 $(lsof -i:PORT -t) 2> /dev/null

예 : Mac에서 포트 9604를 지우고 싶었습니다. 다음 명령은 참처럼 작동했습니다.

 kill -9 $(lsof -i:9604 -t) 2> /dev/null 

6

이 첫 번째 명령을 사용하여 특정 포트를 소유 한 프로세스를 종료 할 수도 있습니다.

sudo netstat -ap | grep :<port_number>

예를 들어이 프로세스에 포트가 있다고 가정하십시오. 8000 TCP를다음 명령을 실행.

sudo netstat -ap | grep :8000

프로세스 홀딩 포트에 해당하는 라인을 출력합니다 8000에.

tcp  0  0 *:8000   *:* LISTEN  4683/procHoldingPort

이 경우 procHoldingPort 는 포트를 연 프로세스의 이름입니다. 4683 은 pid이며 8000입니다. (TCP 임)은 보유하고있는 포트 번호입니다 (닫고 자 함).

그런 다음 위의 예제에 따라 프로세스를 종료하십시오.

kill  4683

다른 사람들이 여기에 언급했듯이, 그래도 작동하지 않으면 (-9를 인수로 사용하여 kill을 시도 할 수 있습니다)

kill -9 4683

다시 말하지만 일반적으로 가능하면 SIGKILL (-9)을 보내지 않는 것이 좋습니다.

건배,

사람.


5

나는 lsof함께 사용kill위에서 언급했듯이 . 그러나이 과정을 자동화하기 위해 빠른 작은 bash 스크립트를 작성했습니다.

이 스크립트를 사용하면 killport 3000어디에서나 간단히 입력 할 수 있으며 포트에서 실행중인 모든 프로세스가 종료됩니다.3000 .

https://github.com/xtrasimplicity/killport


1
당신은 내 하루를 구했습니다. 어떤 이유로 lsof와 함께 kill아무것도 반환하지 않고 macOS Sierra에서 스크립트를 중단했습니다. 그러나 killport매력처럼 작동하고 더 빠릅니다. 감사!
(Wout)을

4

이 목적을 위해 함수를 만들었습니다.

function free_port() {
    if [ -z $1 ] 
    then
        echo no Port given
    else
        PORT=$1;
        PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port 

        if [ -z $PID ] 
        then
            echo port: $PORT is already free.
        else
            sudo kill -9 $PID # kill the process, which frees the port
            echo port: $PORT is now free.
        fi
    fi
}

free_port 80 # you need to change this port number

이 코드 블록을 터미널에 복사하여 붙여 넣으면 원하는 포트가 해제됩니다. 마지막 줄에서 포트 번호를 변경하십시오.


3

실행중인 포트가 있다고 가정하면 아래에서 시도하십시오 8000.

free-port() { kill "$(lsof -t -i :8000)"; }

여기 에서 참조를 찾았습니다


1

포트를 연 프로그램이 종료되면 포트가 자동으로 닫힙니다. 이 서버를 실행하는 Java 프로세스를 종료하면 그렇게해야합니다.


-1
  1. 먼저 필요한 포트를 점유 한 Procees ID (pid)를 찾으십시오 (예 : 5434).

    PS AUX | 그렙 5434

그 과정을 2.kill

   kill -9 <pid>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.