포트 번호로 Linux 프로세스를 종료하는 방법

포트 번호로 Linux 프로세스를 종료하는 방법

Linux 프로세스를 종료하려면 해당 ID 또는 이름이 필요합니다. 사용 중인 포트만 알면 종료할 수 있습니까? 예, 여러 가지 방법으로.

죽이는 과정

때때로 Linux 프로세스가 응답하지 않을 수 있습니다. 올바르게 작동하지 않거나 계속 작동하지만 끄라는 요청을 무시하거나 메모리, CPU 또는 네트워크 대역폭을 소비하기 시작할 수 있습니다.

동기가 무엇이든 Linux 명령줄에서 프로세스를 종료하는 방법이 있습니다. 고전적인 방법은 죽이려는 프로세스의 ID와 함께 kill 명령을 사용하는 것입니다. kill팀에는 가까운 친척이 여러 명 있습니다 . 이 명령 pkill은 이름으로 프로세스를 종료하고 killall이름의 일부를 공유하는 것을 찾을 수 있는 모든 프로세스를 종료합니다.

프로세스에 대해 알고 있는 것이 컴퓨터의 포트를 사용하고 있다는 것뿐이라면 여전히 프로세스를 식별하고 종료할 수 있는 방법이 있습니다. 네트워킹 용어에서 “포트”는 CAT5 또는 6 네트워크 케이블 과 같이 끝에 플러그가 있는 케이블을 연결하는 물리적 연결을 의미하거나 소프트웨어 포트를 의미할 수 있습니다.

소프트웨어 포트는 네트워크 연결의 마지막 부분입니다. 장치 IP 주소는 컴퓨터 또는 기타 네트워크 장치를 식별합니다. 컴퓨터 내부의 응용 프로그램은 서로 다른 포트를 사용합니다. 그들은 다른 수준의 세부 사항을 제공합니다. 네트워크 트래픽은 IP 주소를 사용하여 올바른 컴퓨터에 도달했으며 포트 주소 지정을 통해 올바른 응용 프로그램에 전달할 수 있습니다.

이것은 우편물이 호텔에 도착한 다음 분류되어 적절한 방으로 배달되는 방식과 유사합니다. IP 주소는 호텔 주소와 같고 객실 번호는 포트 번호와 같습니다.

포트에서 네트워크 활동을 보고 이를 생성하는 프로세스를 인식하지 못하거나 해당 동작으로 인해 문제 또는 의심이 발생하는 경우 해당 프로세스를 종료할 수 있습니다. 포트 번호만 알고 있어도 프로세스를 추적하고 종료할 수 있습니다.

socat과 연결하기

여러 연결을 죽이기 위해 socat다른 프로토콜을 사용하여 네트워크 연결을 만드는 데 사용할 것입니다. 을(를) 설치해야 합니다 socat. Ubuntu에 설치하려면 다음 명령을 사용하십시오.

sudo apt install socat

Ubuntu에 소켓 설치

Fedora 사용 dnf:

sudo dnf install socat

Fedora에 소켓 설치

Manjaro에서는 다음을 입력해야 합니다.

sudo pacman -S socat

Manjaro에 주스 설치

구문 socat은 약간 장황하지만 간단합니다. 출발지와 목적지 주소를 지정해야 합니다. 각각에 대해 프로토콜, IP 주소 및 포트 번호를 지정해야 합니다. 소스 또는 대상으로 STDIN 또는 STDOUT을 대체할 수 있습니다.

이 명령은 포트 7889의 TCP 수신 소켓, 루프백 IP 주소 127.0.0.1 및 STDOUT 간에 연결을 만듭니다. 앰퍼샌드 ” &“는 백그라운드에서 명령을 실행하므로 명령줄에 계속 액세스할 수 있습니다.

socat tcp-listen:7889,bind=127.0.0.1 stdout &

socat으로 수신 TCP 소켓 연결 만들기

서로 다른 프로토콜을 사용하는 소수의 소켓을 선택할 수 있도록 두 개의 연결을 더 만들 것입니다. UDP 연결과 SCTP 연결 을 생성 합니다 . 변경되는 명령의 유일한 부분은 프로토콜입니다.

socat udp-listen:7889,bind=127.0.0.1 stdout & socat sctp-listen:9999,bind=127.0.0.1 stdout &

socat을 사용하여 UDP 및 SCTP 소켓 수신 연결 만들기

암살의 사용

물론 kill프로세스 ID를 알고 있으면 프로세스를 종료하는 데 사용할 수 있습니다. PID를 찾으려면 lsof명령을 사용할 수 있습니다.

TCP 프로토콜을 사용하는 포트 7889에서 프로세스의 세부 정보를 나열하기 위해 -i여기에 표시된 것처럼 (인터넷 주소) 옵션을 사용합니다.

lsof -i tcp:7889

lsof를 사용하여 특정 포트 및 프로토콜을 사용하는 프로세스의 세부 정보를 표시합니다.

이 프로세스의 PID는 3141이며 다음과 함께 사용할 수 있습니다 kill.

sudo kill 3141

파이프를 사용하면 노력을 절약할 수 있습니다. 우리가 관심 있는 포트를 포함하는 라인을 찾도록 출력 lsofawk지시 하고 awk– 7889 – 이 라인에서 두 번째 필드를 인쇄하면 PID를 분리합니다.

lsof -i tcp:7889 | awk '/7889/{print $2}'

lsof 출력을 awk로 파이프

그런 다음 를 사용하여 출력 awkkill명령 으로 파이프할 수 있습니다 xargs. 명령 xargs은 파이프라인을 통해 입력을 받아 다른 명령에 명령줄 매개변수로 전달합니다. 우리는 팀 xargs과 함께 사용할 것입니다 kill.

lsof -i tcp:7889 | awk '/7889/{print $2}' | xargs kill

파이프를 사용하여 lsof 출력을 awk로, awk에서 xargs로 파이프하고 죽이기

시각적 피드백은 받지 않습니다. 일반적인 Linux 방식에서는 뉴스가 없는 것이 좋은 뉴스입니다. 프로세스가 완료되었는지 확인하려면 lsof다시 사용할 수 있습니다.

lsof -i tcp:7889

lsof를 사용하여 성공하지 못한 특정 포트 및 프로토콜을 사용하여 프로세스 세부 정보 조회

lsof아무 것도 보고하지 않기 때문에 그러한 연결이 없음을 알고 있습니다.

이전 명령에서 “tcp”를 “udp”로 바꾸면 UDP 프로토콜을 사용하는 프로세스를 제거할 수 있습니다.

lsof -i udp:7889 | awk '/7889/{print $2}' | xargs kill

파이프를 사용하여 lsof 출력을 awk로, awk에서 xargs로 파이프하고 UDP 소켓에 대해 kill

그러나 lsofSCTP 프로토콜을 인식하지 못합니다.

lsof -i sctp:7889

lsof는 SCTP 프로토콜에서 작동하지 않습니다

ss이를 위해 명령을 사용할 수 있습니다 . (SCTP) 옵션을 사용하여 -SSCTP 소켓을 검색하고 -a(all) 옵션을 사용하여 모든 유형의 소켓(청취, 수신, 연결 등)을 검색하고 -p(프로세스) 옵션을 사용하여 프로세스에 대한 정보를 나열합니다. 소켓.

ss -Sap

ss와 함께 SCTP 소켓을 사용하여 프로세스 세부 정보 인쇄

grep및 를 사용하여 이 출력을 구문 분석할 수 있습니다 awk. grep일부 PERL 정규식으로 구문 분석할 수도 있지만 이 방법이 훨씬 이해하기 쉽습니다. 이것을 한두 번 이상 사용하려는 경우 별칭이나 쉘 함수로 만들 것입니다.

에서 출력을 보내고 ss포트 grep번호 7889를 찾습니다. 출력을 에서 grep로 보냅니다 awk. 에서 (구분자 문자열) 옵션을 awk사용 -F하여 쉼표 ” ,“를 필드 구분 기호로 설정합니다. “pid=”가 포함된 줄을 찾고 해당 줄에서 두 번째 쉼표로 구분된 필드를 인쇄합니다.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}'

파이프를 사용하여 ss, grep 및 awk를 연결하여 PID 문자열 추출

이것은 우리에게 “pid=2859″라는 문자열을 주었습니다.

이를 다시 전달 awk하고 필드 구분 기호를 등호 ” =“로 설정하고 해당 줄에서 두 번째 필드를 인쇄할 수 있습니다. 이 필드는 등호 뒤에 있는 텍스트가 됩니다.

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}'

파이프를 사용하여 ss, grep 및 awk를 두 번 연결하여 PID 추출

이제 프로세스 ID를 분리했습니다. xargsPID를 kill명령줄 매개변수 로 전달하는 데 사용할 수 있습니다 .

ss -Sap | grep "7889"| awk -F',' '/pid=/{print $2}' | awk -F'=' '{print $2}' | xargs kill

파이프를 ss, grep, awk 및 xargs와 함께 사용하여 SCTP 소켓 프로세스 종료

이렇게 하면 포트 7889에서 SCTP 프로토콜 소켓을 사용하던 프로세스가 종료됩니다.

퓨저팀

이 명령 fuser은 작업을 크게 단순화합니다. 단점은 TCP 및 UDP 소켓에서만 작동한다는 것입니다. 플러스 측면에서, 이것들은 당신이 다루어야 할 가장 일반적인 두 가지 소켓 유형입니다. 이 명령 fuser은 테스트한 Ubuntu, Fedora 및 Manjaro 시스템에 이미 설치되어 있습니다.

(kill) 옵션을 사용 -k하고 포트와 프로토콜을 지정하기만 하면 됩니다. (네임스페이스) 옵션을 사용 -n하고 프로토콜과 포트를 지정하거나 “슬래시 레이블 형식”을 사용하고 먼저 포트 번호를 지정할 수 있습니다.

fuser -n tcp 7889 fuser 7889/udp

fuser 명령을 사용하여 TCP 및 UDP 소켓을 사용하는 프로세스 종료

터미널 창에 완료된 프로세스의 포트 번호, 프로토콜 및 PID가 인쇄됩니다.

먼저 퓨저를 사용해 보십시오.

작업 중인 컴퓨터에 설치될 가능성이 가장 높고 프로토콜은 TCP 또는 UDP일 가능성이 높으므로 가장 쉬운 방법이 적합할 가능성이 큽니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다