특정 포트에서 수신 대기중인 프로세스 PID 결정


101

제목이 말하듯, 여러 개의 게임 서버를 실행하는거야, 그리고 그들 모두는 같은 가지고 name있지만, 다른 PIDport수입니다. PID특정 포트에서 수신하는 서버 와 일치 시키고이 프로세스를 종료하고 싶습니다. bash 스크립트를 완료하려면이 정보가 필요합니다.

그게 가능할까요? 웹에서 아직 솔루션을 찾지 못했기 때문입니다.

답변:


125

-p플래그 netstat는 프로세스의 PID 를 제공합니다.

netstat -l -p

편집 : FreeBSD에서 소켓 사용자의 PID를 얻기 위해 필요한 명령은 sockstat. @Cyclone과의 토론에서 작업 한대로 작업을 수행하는 라인은 다음과 같습니다.

sockstat -4 -l | grep :80 | awk '{print $3}' | head -1

2
netstat: 80: unknown or uninstrumented protocol목적 80을 테스트하기 위해 (nginx) 포트를 사용했습니다 . 작동하지 않습니다.
Cyclone

5
시도 netstat -nlp | grep :80대신에
stanwise

12
netstat: option requires an argument -- p
Cyclone

2
@jasonbrittain Cygwin에서 Windows 네이티브 netstat가 호출됩니다. 다른 구문이 있습니다.
stanwise

2
이 대답은 틀 렸습니다 : netstat : 옵션에는 인수가 필요합니다-p
Good Person

143

명령을 죽이기 위해 전달할 수있는 짧은 버전 :

lsof -i:80 -t

13
여기에는 해당 포트에 연결된 프로세스도 포함됩니다 . lsof -i4TCP:80 -sTCP:LISTEN -t대신에 원하는 것입니다.
Nevir

내가 찾던 바로 그것. 실행중인 포트를 검색하여 프로세스를 죽이고 싶었습니다.
mythicalcoder

@Nevir "해당 포트에 연결된 프로세스도 포함"이란 무슨 뜻입니까? 설명해 주시겠습니까?
kishorer747

2
kill -9 `lsof -i:80 -t`복사의 용이성을 위해
bmjrowe

17

netstat -p -l | grep $PORTlsof -i :$PORT 솔루션은 좋은 그러나 나는 선호 fuser $PORT/tcpPOSIX (대한 작업을 확장 구문을 coreutils파이프로) :

pid=`fuser $PORT/tcp`

그것은 순수한 pid를 인쇄하므로 sed마술을 떨어 뜨릴 수 있습니다 .

fuser내 애호가 도구 를 만드는 한 가지는 해당 프로세스에 직접 신호를 보내는 기능입니다 (이 구문은 POSIX의 확장이기도합니다).

$ fuser -k $port/tcp       # with SIGKILL
$ fuser -k -15 $port/tcp   # with SIGTERM
$ fuser -k -TERM $port/tcp # with SIGTERM

또한 -k는 FreeBSD에서 지원합니다 : http://www.freebsd.org/cgi/man.cgi?query=fuser


1
퓨저 우리의 깔끔한하고 간결한
Dawoodjee

10

netstat -nlp 어떤 포트에서 수신 중인지 PID를 알려야합니다.


1
netstat: 80: unknown or uninstrumented protocol목적 80을 테스트하기 위해 (nginx) 포트를 사용했습니다 . 작동하지 않습니다.
Cyclone

3

sockstat가 내 컴퓨터에 기본적으로 설치되지 않았기 때문에 대신 netstat를 사용하기 위해 stanwise의 답변을 해킹했습니다.

netstat -nlp | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:2000" | awk '{print $7}' | sed -e "s/\/.*//g""

3

나는 프로그래밍 방식으로 -Bash 만 사용하여-주어진 포트에서 수신하는 프로세스를 종료하고 싶었습니다 .

포트가 8089라고 가정하고 다음은 내가 한 방법입니다.

badPid=$(netstat --listening --program --numeric --tcp | grep "::8089" | awk '{print $7}' | awk -F/ '{print $1}' | head -1)
kill -9 $badPid

다른 사람에게 도움이되기를 바랍니다. 나는 그것이 우리 팀을 도울 것이라는 것을 알고 있습니다.


1
다음은이를 수행하는 데 사용하는 기능 function kill-listener { lsof -i:$1 -t | xargs kill -9 }입니다. 포트 8089의 예를 사용하여 :kill-listener 8089
Hurricane Hamilton

3

통사론:

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

예 : 포트 4200에서 실행중인 프로세스를 종료하려면 다음 명령을 실행하십시오.

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

Ubuntu에서 테스트되었습니다.


2

Windows에서 pid를 가져 오는 netstat 옵션은 -o이고 -p는 프로토콜 필터를 선택합니다. 예 : netstat -a -p tcp -o

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