Linux의 특정 포트에서 실행되는 프로세스를 종료하는 방법은 무엇입니까?


761

./shutdown.shtomcat /bin디렉토리 에서 tomcat 을 닫으려고했습니다 . 그러나 서버가 제대로 닫히지 않았다는 것을 알았습니다. 따라서 다시 시작할 수 없었습니다 .
바람둥이가 포트에서 실행 중입니다 8080.

에서 실행중인 Tomcat 프로세스를 종료하고 싶습니다 8080. 먼저 종료 할 프로세스를 선택하기 위해 특정 포트 (8080)에서 실행중인 프로세스 목록을 갖고 싶습니다.


답변:


935

그러면 fuser 8080/tcp해당 포트에 프로세스 바운드 PID가 인쇄됩니다.

그리고 이것은 fuser -k 8080/tcp그 과정을 죽일 것입니다.

Linux에서만 작동합니다. 보다 보편적 인 것은 lsof -i4(또는 IPv6의 경우 6)입니다.


2
이것은 8080에 연결된 소켓을 닫습니까?
fer y

9
포트가 올바르게 닫히지 않았습니다. 상위 프로세스가 종료 된 후 포트는 TIME_WAIT 상태가됩니다. 그런 다음 OS는 약 60 초 후에 포트를 완전히 닫습니다. 소켓에 재사용 옵션을 제공하지 않으면 포트를 60 초 이상 재사용 할 수 없습니다.
Mark Lakata

2
다윈에서는 다른 버전의를 사용해야합니다 fuser. 지원하지 않는 파일 만 가져옵니다 -k.
ap

3
'fuser -k -n tcp 8080'도 프로세스를 종료합니다
Hesham Yassin

7
@dbliss 퓨저는 psmisc의 일부입니다. 을 얻는 경우 fuser: command not foundpsmisc를 설치하십시오. CentOS / RHEL 7의 경우sudo yum install psmisc
Tom

699

포트 8080을 수신하는 프로세스를 나열하려면 다음을 수행하십시오.

lsof -i:8080

포트 8080을 수신하는 프로세스를 종료하려면 다음을 수행하십시오.

kill $(lsof -t -i:8080)

또는 더 심하게 :

kill -9 $(lsof -t -i:8080)

( 신호에 -9해당 SIGKILL - terminate immediately/hard kill: Kill 신호 목록kill 명령에서 -9 옵션의 목적은 무엇입니까?를 참조하십시오 .에 신호가 지정되지 않은 경우 killTERM 신호가 일명 -15또는 soft kill전송됩니다. 프로세스).


9
kill : 사용법 : kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... 또는 kill -l [sigspec] 이것은 내가 당신의 명령을 실행할 때 얻는 것입니다
Sudhir Belagali

2
@SudhirBelagali 슈퍼 사용자로 당신에게 그것을했다sudo
마르셀 Djaman에게

5
내 Mac에서도 작업
asherbar

2
때때로 프로세스 ID를 볼 수있는 권한이없는 경우가 있으므로 추가하고 싶습니다 sudo lsof -i:8080.
Akavall

1
두 번째 팁이 더 폭력적인 이유는 무엇입니까?
Webwoman

281

명령을 사용하십시오

 sudo netstat -plten |grep java

사용 grep java으로 tomcat사용 java자신의 프로세스로.

포트 번호와 프로세스 ID를 가진 프로세스 목록을 보여줍니다.

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/java

이전의 번호 /java는 프로세스 ID입니다. 이제 kill명령을 사용 하여 프로세스를 종료하십시오.

kill -9 16085

-9 프로세스가 강제로 종료됨을 나타냅니다.


11
를 통해 프로세스 이름을 얻으려면 루트 권한이 필요할 수 있습니다 netstat.
조나스 셰퍼

2
@JonasWielicki 당신은 당신이 루트 권한을 가진 사람을 볼 수 있습니다.
dbliss

netstat에 대한 루트 권한이 필요했습니다. 프로세스의 출처를 실제로 알 수있는 방법이 있습니까? 내가 알 수있는 한 모든 응용 프로그램을 닫았지만 실수로 프로세스를 백그라운드 작업으로 푸시 한 터미널 창에서 왔을 수 있습니다. 아마도 모든 프로세스를 먼저 보려면 터미널 명령 'ps'를 실행해야했을 것입니다.
JesseBoyd

150

특정 포트에서 LISTEN 만 죽이려면이 한 줄짜리를 추가하십시오.

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


9
이것이 최선의 대답이라고 생각합니다. 감사합니다 @Gal Bracha의
샘 KAH Chiin

2
이것은 브라우저를 죽이지 않기 때문에 가장 좋은 솔루션입니다!
Russo

최고의 답변! 간단하고 간결하며 올바르게 작업합니다.
차르 봄바

116

lsof 명령을 사용할 수 있습니다. 여기와 같은 포트 번호는 8090입니다

lsof -i:8090

이 명령은이 포트에서 열린 프로세스 목록을 리턴합니다.

같은 것…

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 75782 eoin 5u IPv6 0x01c1c234 0t0 TCP localhost:8090 (LISTEN)

포트를 해제하려면 포트를 사용하여 프로세스를 종료하십시오 (프로세스 ID는 75782입니다).

kill -9 75782

이것은 나를 위해 일했습니다. 다음은 원래 게시물의 링크입니다.


1
프로세스를 강제로 종료하려면 kill -9 75782와 같은 -9를 사용해야합니다. 때로는 적은 프로세스 만 죽이지 않고 죽일 수 있습니다
veer7

73

포트 번호 8080에서 실행중인 프로세스를 종료하려면 먼저 8080 포트 프로세스 식별 번호 (PID)를 찾아서 종료해야합니다. 다음 명령을 실행하여 8080 포트 번호 PID를 찾으십시오.

sudo lsof -t -i:8080

여기,

  • sudo- 관리자 권한을 요청하는 명령 (사용자 ID 및 비밀번호).
  • lsof- 파일 목록 (관련 프로세스를 나열하는 데 사용됨)
  • -t- 프로세스 ID 만 표시
  • -i- 인터넷 연결 관련 프로세스 만 표시
  • : 8080- 이 포트 번호의 프로세스 만 표시

따라서 다음 명령을 사용하여 PID를 쉽게 죽일 수 있습니다.

sudo kill -9 <PID>

여기,

  • kill-프로세스를 종료하는 명령
  • -9-강력하게

다음 명령을 사용하여 하나의 명령을 사용하여 특정 포트에서 프로세스를 종료 할 수 있습니다.

sudo kill -9 $(sudo lsof -t -i:8080)

자세한 내용은 다음 링크를 참조하십시오 .Linux의 특정 포트에서 프로세스를 종료하는 방법


고마워 친구. sudo kill -9 $(sudo lsof -t -i:8080)나를 위해 일했다
Junaid


41

실행중인 모든 프로세스 ID를 지정합니다 <port_number>.

fuser -n tcp <port_number> 

또한 stderr에 일부 내용을 인쇄하므로 다음을 수행하십시오.

fuser -n tcp <port_number> 2> /dev/null

그런 다음이 프로세스 ID를 kill명령에 제공 할 수 있습니다 .

sudo kill $(fuser -n tcp <port_number> 2> /dev/null)

당신이 그것을 많이하면 이것을 함수에 넣을 수도 있습니다.

function killport() {
    sudo kill $(fuser -n tcp $1 2> /dev/null)
}

35

작업의 PID를 가져 와서 죽입니다.

lsof -ti:8080 | xargs kill

답변 해주셔서 감사합니다. Mac OS에서 매우 원활하게 작동합니다. 너는 최고야. 그냥 투표하세요.
AMIC MING

1
와 같은 포트 범위에서도 잘 작동합니다 lsof -ti:8080-8089 | xargs kill.
dvlsg

34

특정 포트에서 실행되는 서비스의 pid를 알려면 :

netstat -tulnap | grep :*port_num*

해당 프로세스에 대한 설명을 얻을 수 있습니다. 이제 kill 또는 kill -9 pid를 사용하십시오. 쉽게 죽었다.

예 :

netstat -ap | grep :8080

tcp6       0      0 :::8080       :::*    LISTEN      1880/java 

지금:

kill -9 1880

모든 명령을 다음과 같이 실행하십시오. root


29

짧막 한 농담

kill -9 $(lsof -t -i tcp:8080)

여기에 설명 : 조합 사용 lsof and kill

root@localhost:~# lsof -i tcp:8080
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    23672 sine  238u  IPv6 3028222      0t0  TCP localhost:http-alt (LISTEN)

pid를 선택하고 사용하십시오 kill

kill 23672


16

포트 번호를 선택하고 아래 그림과 같이 grep in netstat 명령을 적용하십시오

netstat -ap | grep :7070

콘솔 출력

tcp 00 ::: 7070 ::: * 듣기 3332 / 자바

킬 (kill) 서비스 를 기반으로 PID를 (프로세스 식별 번호)

kill -9 3332

13
  1. lsof -i tcp:8000 이 명령은 포트 8000에서 실행중인 프로세스에 대한 정보를 나열합니다.

  2. kill -9 [PID] 이 명령은 프로세스를 종료합니다


방금 몇 주 전에 우연히이 문제를 공표 한 것으로 나타났습니다. 만약 당신이 anwer를 약간 편집하면 그것을 제거 할 수 있어야합니다
Robin-Hoodie

12

Linux : 먼저 포트를 알고 있으면이 명령의 PID를 찾을 수 있습니다.

netstat -tulpn 

예:-

 Local Address  Foreign Address  State    PID/Program name

  :::3000       :::*             LISTEN    15986/node 

그런 다음 킬 프로세스를 수행하십시오. 다음 명령을 실행하십시오.

-9 PID 죽이기

예 :-

죽이기 -9 15986


10

Linux : 포트를 알고 있으면이 명령을 사용할 수 있습니다.

netstat -plten | grep LISTEN | grep 8080

AIX :

netstat -Aan | grep LISTEN | grep 8080

그런 다음 첫 번째 열 (예 : f100050000b05bb8)을 사용하여 다음 명령을 실행하십시오.

rmsock f100050000b05bb8 tcpcb

프로세스를 종료하십시오.


10

세부 정보 (pid, 주소 등)와 함께 시스템에서 실행중인 모든 포트의 목록을 알 수 있습니다 .

netstat -tulpn

다음 명령에서 포트 번호 를 제공 하여 특정 포트 번호의 세부 사항을 알 수 있습니다 .

sudo netstat -lutnp | grep -w '{port_number}'

예 : sudo netstat -lutnp | grep -w '8080'세부 사항은 다음과 같이 제공됩니다.

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

pid를 사용하여 프로세스를 종료하려면 다음을 수행하십시오 .kill -9 {PID}

포트 번호를 사용하여 프로세스를 종료하려면 다음을 수행하십시오 .fuser -n tcp {port_number}

sudo액세스 할 수없는 경우 사용 하십시오.


6

kill -9 `fuser 8080/tcp|xargs -n 1`이 명령은 또한 TCP 연결로 포트 8080에서 수신 대기하는 프로세스를 종료합니다.


4
sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp

결과 : 80 / tcp : 1858 1867 1868 1869 1871

하나씩 프로세스를 종료

죽이기 -9 1858


3

사용 가능한 Linux 도구 세트가 제한된 Yocto Linux 시스템에서 작업하고 있습니다. 특정 포트 (1883)를 사용하고 있던 프로세스를 종료하고 싶었습니다.

먼저, 어떤 포트를 듣고 있는지 확인하려면 다음 명령을 사용했습니다.

root@root:~# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:hostmon         0.0.0.0:*               LISTEN      
tcp        0      0 localhost.localdomain:domain 0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:9080            0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      
tcp        0      0 :::hostmon              :::*                    LISTEN      
tcp        0      0 localhost:domain        :::*                    LISTEN      
tcp        0      0 :::ssh                  :::*                    LISTEN      
tcp        0      0 :::1883                 :::*                    LISTEN      

다음으로 포트 1883을 사용하여 다음과 같은 방법으로 프로세스 이름을 찾았습니다.

root@root:~# fuser 1883/tcp
290 
root@root:~# ps | grep 290
  290 mosquitt 25508 S    /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
12141 root      8444 S    grep 290

위에서 볼 수 있듯이 프로그램입니다 /usr/sbin/mosquitto 포트 1883을 사용 입니다.

마지막으로 프로세스를 종료했습니다.

root@root:~# systemctl stop mosquitto

systemctl이 경우에는 시스템화 된 서비스 인 becuase를 사용 했습니다.


2

필자의 경우 cent os는 제안 된 답변에 약간의 문제가 있습니다. 그래서 다음 해결책을 사용했습니다.

  ss -tanp | grep 65432 | head -1 | grep -Po "(?<=pid=).*(?=,)" | xargs kill

1

무엇 @ veer7 에 구축 말한 것을 :

포트에 무엇이 있는지 알고 싶다면 죽이기 전에 수행하십시오.

$ sudo netstat -plten |grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       906726      25296/java      
tcp6       0      0 :::8009                 :::*                    LISTEN      1000       907503      25296/java      
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       907499      25296/java      
$ ps 25296
  PID TTY      STAT   TIME COMMAND
25296 ?        Sl     0:16 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dcatalina.base=/hom

'ps'와 netstat가보고 한 프로세스 수를 사용하십시오.


1

Git Bash와 다른 방법 :

stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}

1
  1. 먼저 프로세스를 확인 netstat -lt
  2. 프로세스 ID 확인 fuser <port number>/tcp
  3. 포트에서 실행중인 프로세스를 종료 kill <process id>

-3

Windows에서는 netstat -ano | grep "8080"다음과 같은 메시지가 나타납니다.TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076

우리는 사용하여 PID를 죽일 수 있습니다 taskkill /F /PID 10076


문제는 분명히 리눅스 도움을 요청하는 것입니다. Windows가 아닙니다.
babycakes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.