Computer >> 컴퓨터 >  >> 소프트웨어 >> 소프트웨어

포트 번호로 리눅스 프로세스 종료하기: fuser, lsof, netstat 완벽 가이드

리눅스 머신에서 특정 포트를 사용 중인 프로세스를 중단해야 하는 상황을 겪어본 적이 있으신가요?

실행 중인 애플리케이션이 오작동하거나 네트워크 자원과 CPU를 과도하게 점유하고 있다면 걱정될 수 있습니다. 심한 경우 보안 위협이 될 수 있는 프로세스를 제거해야 할 때도 있습니다.

이유가 무엇이든, 터미널에서 fuser, lsof, netstat 명령어(kill과 함께)를 사용하면 포트 번호를 기준으로 리눅스 프로세스를 찾아 종료할 수 있습니다. 이 명령어들은 우분투(Ubuntu)를 포함한 대부분의 리눅스 배포판에서 동일하게 작동합니다.

fuser 명령어로 프로세스 종료하기

포트 번호로 프로세스를 종료하는 가장 간단한 방법 중 하나는 fuser 명령어를 사용하는 것입니다. 이 명령어는 파일이나 소켓에 접근하는 프로세스를 조회하거나 종료할 수 있습니다. 네트워크 활동(즉, 열린 포트 사용)으로 실행되는 애플리케이션이라면 대부분 이 두 작업 중 하나에 해당합니다.

시작하기 전에 리눅스 터미널 사용에 어느 정도 익숙해져 있는지 확인하세요.

포트 번호로 리눅스 프로세스 종료하기: fuser, lsof, netstat 완벽 가이드

fuser로 특정 포트를 사용하는 프로세스를 조회하려면 다음 구문을 사용합니다:

fuser -n [프로토콜] [포트]

여기서 프로토콜은 tcp 또는 udp이며, 포트는 확인하려는 포트 번호입니다. 예를 들어 TCP 80번 포트를 사용하는 프로세스를 확인하려면 다음을 실행합니다:

fuser -n tcp 80

이 명령은 해당 포트를 사용하는 프로세스 ID(PID)를 출력합니다.

이 프로세스들을 종료하려면 -k 옵션을 추가합니다. 각 프로세스에 SIGTERM 시그널을 보내 정상적으로 종료하도록 요청합니다:

fuser -k -n tcp 80

TCP 80번 포트를 사용하는 모든 프로세스가 종료됩니다.

SIGTERM에 응답하지 않는 프로세스가 있다면 -k 대신 -KILL을 사용하세요. 이 경우 강제 종료 시그널(SIGKILL)이 전송되어 프로세스가 즉시 종료됩니다. 다만 데이터 손실이나 손상이 발생할 수 있으므로 신중하게 사용해야 합니다:

fuser -KILL -n tcp 80

TCP 80번 포트를 사용하는 모든 프로세스가 강제로 종료됩니다. 문제가 발생하면 sudo 명령어로 슈퍼 유저 권한을 얻거나 root 계정으로 실행하세요.

lsof 명령어로 프로세스 종료하기

포트 번호로 프로세스를 종료하는 또 다른 방법은 lsof 명령어입니다. 이 명령어는 시스템에서 열려 있는 파일과 소켓 목록을 조회할 수 있습니다.

포트 번호로 리눅스 프로세스 종료하기: fuser, lsof, netstat 완벽 가이드

특정 포트를 사용하는 프로세스를 조회하려면 다음 구문을 사용합니다:

lsof -i [프로토콜]:[포트]

예를 들어 TCP 53번 포트(주로 DNS 요청에 사용됨)를 사용하는 프로세스를 확인하려면 다음 명령을 실행합니다:

lsof -i tcp:53

이 명령은 해당 포트를 사용하는 각 프로세스의 PID를 포함한 상세 정보를 출력합니다.

이 프로세스들을 종료하려면 -t 옵션을 사용합니다. 이 옵션은 다른 정보 없이 PID만 출력하므로, 그 결과를 kill 명령어에 파이프하여 전달할 수 있습니다:

kill $(lsof -t -i tcp:53)

TCP 53번 포트를 사용하는 모든 프로세스에 SIGTERM 시그널(기본값)이 전송됩니다.

SIGTERM에 응답하지 않는 프로세스가 있다면 -9 옵션을 사용합니다. 이 경우 SIGKILL 시그널이 전송되어 즉시 종료되지만, 역시 데이터 손실 가능성이 있습니다:

kill -9 $(lsof -t -i tcp:53)

TCP 53번 포트를 사용하는 모든 프로세스에 SIGKILL 시그널이 강제로 전송됩니다.

netstat 명령어로 프로세스 종료하기

netstat 명령어를 사용하면 활성화된 네트워크 포트를 기반으로 실행 중인 프로세스를 추적할 수 있습니다. netstat는 시스템의 네트워크 연결과 통계를 조회할 수 있게 해주므로, 문제가 되는 프로세스를 정확히 찾아내는 데 유용합니다.

포트를 사용하는 프로세스와 해당 PID를 함께 조회하려면 두 가지 옵션이 필요합니다: PID를 표시하는 -p와 리스닝(listening) 소켓만 표시하는 -l입니다.

또한 프로토콜(tcp, udp 등)을 지정하고, 필요에 따라 상태(LISTEN 등)로 필터링할 수 있습니다. 예를 들어 리스닝 중인 모든 TCP 프로세스를 확인하려면 다음을 실행합니다:

netstat -p tcp -l

이 명령은 각 TCP 소켓이 리스닝 중인 포트와 PID를 포함한 정보를 출력합니다.

포트 번호로 리눅스 프로세스 종료하기: fuser, lsof, netstat 완벽 가이드

특정 포트로 필터링하려면 이름 대신 숫자 주소를 표시하는 -n 옵션을 추가로 사용해야 합니다. 주소 형식은 [protocol][@hostname|hostaddr][:service|port]를 따릅니다.

예를 들어 TCP 80번 포트에서 리스닝 중인 프로세스를 확인하려면 다음을 실행합니다:

netstat -p tcp -l -n 80

이 명령은 80번 포트에서 리스닝 중인 각 TCP 소켓의 PID를 포함한 정보를 출력합니다.

포트 번호로 리눅스 프로세스 종료하기: fuser, lsof, netstat 완벽 가이드

이 프로세스들을 종료하려면 kill 명령어에 원하는 시그널 옵션과 netstat에서 얻은 PID를 함께 사용합니다:

kill 1234 5678

PID가 1234와 5678인 프로세스에 SIGTERM 시그널(기본값)이 전송됩니다.

SIGTERM에 응답하지 않는다면 -9 옵션을 사용합니다:

kill -9 1234 5678

PID가 1234와 5678인 프로세스에 SIGKILL 시그널이 강제로 전송됩니다. 실제 환경에서는 1234를 종료하려는 프로세스의 올바른 PID로 교체하세요.

포트 번호로 리눅스 프로세스 종료하기: fuser, lsof, netstat 완벽 가이드

리눅스 애플리케이션 관리의 시작

위에서 소개한 방법을 활용하면 리눅스 명령줄에서 포트 번호를 기준으로 실행 중인 프로세스를 빠르게 종료할 수 있습니다. 다만 프로세스를 종료할 때는 특히 SIGKILL 시그널 사용 시 주의해야 합니다. 원치 않는 부작용이 발생할 수 있으며, 시스템 불안정을 초래할 수 있기 때문입니다.

리눅스 시스템 성능을 더 깊이 살펴보고 싶다면 메모리 사용량 확인부터 시작해 보세요. 잠재적인 보안 위험이 걱정된다면 리눅스 비밀번호 변경도 함께 고려하는 것이 좋습니다.

새로운 리눅스 배포판으로 전환을 계획 중이라면, 초보자에게는 안전하고 안정적인 Linux Mint를 추천합니다.