development

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

big-blog 2020. 8. 27. 08:14
반응형

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


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

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


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

netstat -l -p

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

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

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

lsof -i:80 -t

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


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


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

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

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

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


통사론:

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

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

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

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


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""

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

참고 URL : https://stackoverflow.com/questions/9856590/determine-the-process-pid-listening-on-a-certain-port

반응형