답변:
의 -p
플래그 netstat
는 프로세스의 PID 를 제공합니다.
netstat -l -p
편집 : FreeBSD에서 소켓 사용자의 PID를 얻기 위해 필요한 명령은 sockstat
. @Cyclone과의 토론에서 작업 한대로 작업을 수행하는 라인은 다음과 같습니다.
sockstat -4 -l | grep :80 | awk '{print $3}' | head -1
netstat -nlp | grep :80
대신에
netstat: option requires an argument -- p
netstat
가 호출됩니다. 다른 구문이 있습니다.
명령을 죽이기 위해 전달할 수있는 짧은 버전 :
lsof -i:80 -t
lsof -i4TCP:80 -sTCP:LISTEN -t
대신에 원하는 것입니다.
kill -9 `lsof -i:80 -t`
복사의 용이성을 위해
netstat -p -l | grep $PORT
및 lsof -i :$PORT
솔루션은 좋은 그러나 나는 선호 fuser $PORT/tcp
POSIX (대한 작업을 확장 구문을 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
netstat -nlp
어떤 포트에서 수신 중인지 PID를 알려야합니다.
netstat: 80: unknown or uninstrumented protocol
목적 80
을 테스트하기 위해 (nginx) 포트를 사용했습니다 . 작동하지 않습니다.
나는 프로그래밍 방식으로 -Bash 만 사용하여-주어진 포트에서 수신하는 프로세스를 종료하고 싶었습니다 .
포트가 8089라고 가정하고 다음은 내가 한 방법입니다.
badPid=$(netstat --listening --program --numeric --tcp | grep "::8089" | awk '{print $7}' | awk -F/ '{print $1}' | head -1)
kill -9 $badPid
다른 사람에게 도움이되기를 바랍니다. 나는 그것이 우리 팀을 도울 것이라는 것을 알고 있습니다.
function kill-listener { lsof -i:$1 -t | xargs kill -9 }
입니다. 포트 8089의 예를 사용하여 :kill-listener 8089
Windows에서 pid를 가져 오는 netstat 옵션은 -o이고 -p는 프로토콜 필터를 선택합니다. 예 : netstat -a -p tcp -o
netstat: 80: unknown or uninstrumented protocol
목적80
을 테스트하기 위해 (nginx) 포트를 사용했습니다 . 작동하지 않습니다.