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

0
256
포트 번호로 Linux 프로세스를 종료하는 방법
Fatmawati achmad zaenuri/Shutterstock.com

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

킬링 프로세스

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

Linux 터미널에서 프로세스를 종료하는 방법

관련된Linux 터미널에서 프로세스를 종료하는 방법

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

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

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

마치 호텔에 도착한 우편물이 분류되어 적절한 방으로 배달되는 것과 같습니다. IP 주소는 호텔의 번지와 같고 객실 번호는 포트 번호와 같습니다.

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

socat으로 연결 만들기

죽일 연결이 있으므로 다음을 사용합니다. socat 다른 프로토콜을 사용하여 네트워크 연결을 생성합니다. 당신은 설치해야합니다 socat . Ubuntu에 설치하려면 다음 명령을 사용하십시오.

sudo apt install socat

우분투에 socat 설치

페도라 사용 시 dnf:

sudo dnf install socat

Fedora에 socat 설치

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

sudo pacman -S socat

Manjaro에 socat 설치하기

구문 socat 조금 길면 간단합니다. 소스 및 대상 주소를 제공해야 합니다. 이들 각각에 대해 프로토콜, IP 주소 및 포트 번호를 제공해야 합니다. STDIN 또는 STDOUT을 소스 또는 대상으로 대체할 수 있습니다.

이 명령은 127.0.0.1의 루프백 IP 주소에 있는 포트 7889의 TCP 수신 소켓과 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 소켓 연결 만들기

관련된: TCP와 UDP의 차이점은 무엇입니까?

죽이기 사용하기

물론 우리는 사용할 수 있습니다 kill 프로세스의 ID가 무엇인지 아는 한 프로세스를 종료합니다. PID를 찾기 위해 다음을 사용할 수 있습니다. lsof 명령.

TCP 프로토콜을 사용하는 포트 7889에서 프로세스의 세부 정보를 나열하려면 다음을 사용합니다. -i (인터넷 주소) 옵션이 있습니다.

lsof -i tcp:7889

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

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

sudo kill 3141

파이프를 사용하면 노력을 절약할 수 있습니다. 출력을 파이프하면 lsof ~ 안으로 awk 그리고 말해 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로 출력하고 kill

우리는 시각적 피드백을 받지 못합니다. 일반적인 Linux 방식에서는 소식이 없는 것이 좋은 소식입니다. 프로세스가 종료되었는지 확인하려면 다음을 사용할 수 있습니다. lsof 한 번 더.

lsof -i tcp:7889

lsof를 사용하여 특정 포트 및 프로토콜을 사용하는 프로세스 세부 정보 검색 성공

왜냐하면 lsof 아무 것도 보고하지 않습니다. 그런 연결이 없다는 것을 알고 있습니다.

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

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

UDP 소켓의 경우 파이프를 사용하여 lsof의 출력을 awk로 가져오고 awk에서 xargs 및 kill로 가져오기

하지만, lsof SCTP 프로토콜을 인식하지 못합니다.

lsof -i sctp:7889

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

우리는 사용할 수 있습니다 ss 그렇게 하라고 명령합니다. 우리는 사용하고 있습니다 -S (SCTP) 옵션을 사용하여 SCTP 소켓을 검색합니다. -a (all) 모든 유형의 소켓(듣기, 수락, 연결 등)을 검색하는 옵션 및 -p (processes) 옵션을 사용하여 소켓을 사용하는 프로세스의 세부 정보를 나열합니다.

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를 분리했습니다. 우리는 사용할 수 있습니다 xargs PID를 전달하려면 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 컴퓨터에 명령이 이미 설치되어 있습니다.

당신이해야 할 모든 -k (kill) 옵션을 선택하고 포트와 프로토콜을 제공합니다. 다음 중 하나를 사용할 수 있습니다. -n (namespace) 옵션을 선택하고 프로토콜과 포트를 제공하거나 “포워드 슬래시 바로 가기 형식”을 사용하고 포트 번호를 먼저 입력하십시오.

fuser -n tcp 7889
fuser 7889/udp

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

종료된 프로세스의 포트 번호, 프로토콜, PID가 터미널 창에 출력됩니다.

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

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