Linux 시스템의 특정 포트에서 실행 중인 프로세스를 중지해야 하는 상황에 직면한 적이 있습니까?
실행 중인 애플리케이션이 오작동하거나 네트워크 리소스나 로컬 CPU 성능을 많이 소모하는 것은 아닌지 걱정될 수 있습니다. 이러한 응용 프로그램은 제거하고 싶은 보안 위협이 될 수도 있습니다.
이유가 무엇이든 터미널에서 (kill과 함께) Fuser, lsof 및 netstat 명령을 사용하면 포트 번호를 사용하는 Linux 프로세스를 찾아 종료하는 데 도움이 됩니다. 이 명령은 Ubuntu를 포함한 대부분의 Linux 운영 체제에서 작동합니다.
fuser 명령을 사용하여 Linux 프로세스를 종료하는 방법
포트 번호를 사용하여 프로세스를 종료하는 가장 쉬운 방법 중 하나는 Fuser 명령을 사용하는 것입니다. 이 Linux 터미널 명령은 파일이나 소켓에 액세스하는 프로세스를 나열하거나 종료할 수 있습니다. 앱이 네트워크 활동으로 실행되는 경우(따라서 개방형 포트를 사용하는 경우) 아마도 다음 두 가지 중 하나를 수행하고 있을 것입니다.
계속하기 전에 Linux PC에서 명령줄 터미널을 사용하는 데 익숙한지 확인해야 합니다.
퓨저를 사용하여 포트 번호를 사용하는 프로세스를 나열하려면 다음 구문을 사용할 수 있습니다:
퓨저 -n 프로토콜 포트
이 예에서 프로토콜은 tcp 또는 udp일 수 있고, port는 확인하려는 포트 번호입니다. 예를 들어, 어떤 프로세스가 TCP 포트 80을 사용하고 있는지 확인하려면 다음을 실행하세요:
퓨저 -n TCP 80
그러면 해당 포트를 사용하는 프로세스의 프로세스 ID(PID)가 인쇄됩니다.
해당 프로세스를 종료하려면 퓨저에 -k 옵션을 추가하면 됩니다. 그러면 각 프로세스에 SIGTERM 신호를 보내 정상적으로 종료하도록 요청합니다. 예:
퓨저 -k -n TCP 80
이렇게 하면 TCP 포트 80을 사용하는 모든 프로세스가 종료됩니다.
일부 프로세스가 SIGTERM에 응답하지 않는 경우 -k 대신 -KILL을 사용할 수 있습니다. 이렇게 하면 현재 실행 중인 프로세스를 강제로 즉시 종료하는 데 도움이 되는 종료 신호(SIGKILL)가 전송됩니다. 하지만 이로 인해 데이터 손실이나 손상이 발생할 수 있으므로 주의해서 사용하세요. 예:
퓨저 -KILL -n tcp 80
이렇게 하면 TCP 포트 80을 사용하는 모든 프로세스가 강제로 종료됩니다. 문제가 발생하면 슈퍼 사용자로(sudo 명령 사용) 또는 대신 루트 사용자로 이 명령을 실행하세요.
lsof 명령을 사용하여 Linux 프로세스를 종료하는 방법
Linux PC에서 포트 번호를 사용하여 프로세스를 종료하는 또 다른 방법은 lsof 명령을 사용하는 것입니다. 이 명령은 시스템에 열려 있는 파일과 소켓을 나열할 수 있습니다.
특정 포트 번호를 사용하는 프로세스를 나열하려면 다음 구문을 사용할 수 있습니다:
lsof -i 프로토콜:포트
이전과 마찬가지로 프로토콜은 tcp 또는 udp일 수 있으며, port는 확인하려는 포트 번호입니다. 예를 들어 어떤 프로세스가 TCP 포트 53(일반적으로 DNS 요청에 사용됨)을 사용하고 있는지 확인하려면 다음 명령을 실행할 수 있습니다.
lsof -i tcp:53
그러면 PID를 포함하여 해당 포트를 사용하는 각 프로세스에 대한 일부 정보가 인쇄됩니다.
해당 프로세스를 종료하려면 lsof와 함께 -t 옵션을 사용할 수 있습니다. 그러면 다른 정보 없이 프로세스의 PID만 인쇄됩니다. 그런 다음 신호 옵션을 사용하여 이 출력을 kill 명령으로 파이프할 수 있습니다. 예:
$(lsof -t -i tcp:53)을 죽여라
그러면 TCP 포트 53을 사용하는 모든 프로세스에 SIGTERM 신호(기본값)가 전송됩니다.
일부 프로세스가 이전처럼 SIGTERM 신호에 응답하지 않으면 종료 후 아무것도 사용하지 않는 대신 -9를 사용할 수 있습니다. 이렇게 하면 이전과 같이 SIGKILL 신호가 전송되어 즉시 종료되지만 데이터 손실이나 손상이 발생할 수도 있습니다. 예:
kill -9 $(lsof -t -i tcp:53)
그러면 TCP 포트 53을 사용하는 모든 프로세스에 SIGKILL 신호(기본값)가 강제로 전송됩니다.
netstat 명령을 사용하여 Linux 프로세스를 종료하는 방법
또한 netstat 명령을 사용하면 활성 및 개방형 네트워크 포트를 사용하여 Linux PC에서 실행 중인 프로세스를 추적할 수 있습니다. netstat를 사용하면 시스템의 네트워크 연결과 통계를 볼 수 있어 문제가 있는 프로세스를 정확히 찾아낼 수 있습니다.
PID와 함께 포트 번호를 사용하여 프로세스를 나열하려면 두 가지 옵션, 즉 PID를 표시하는 -p와 청취 소켓만 표시하는 -l을 추가해야 합니다.
또한 프로토콜(tcp, udp 등)을 지정하고 선택적으로 상태(LISTEN 등)별로 필터링해야 합니다. 예를 들어, 어떤 포트에서 수신 대기 중인 TCP 프로세스를 확인하려면 다음을 실행하세요.
netstat -p TCP -l
그러면 PID를 포함하여 모든 포트에서 수신 대기 중인 각 TCP 소켓에 대한 정보가 인쇄됩니다.
특정 포트별로 필터링하려면 이름 대신 숫자 주소를 표시하는 또 다른 옵션인 -n을 추가해야 합니다. 또한 정확한 주소 형식([프로토콜][@hostname|hostaddr][:service|port])을 지정해야 합니다.
예를 들어, 포트 80에서 수신 대기 중인 TCP 프로세스를 확인하려면 다음을 실행하세요.
netstat -p tcp -l -n 80
그러면 PID를 포함하여 포트 8080을 수신하는 각 TCP 소켓에 대한 정보가 인쇄됩니다.
이러한 프로세스를 종료하려면 원하는 신호 옵션과 netstat에서 얻은 PID와 함께 kill 명령을 사용할 수 있습니다. 예:
1234 5678을 죽여라
그러면 PID 1234 및 5678을 사용하는 프로세스에 SIGTERM 신호(기본값)가 전송됩니다.
일부 프로세스가 이전처럼 SIGTERM 신호에 응답하지 않으면 종료 후 아무것도 사용하지 않는 대신 -9를 사용할 수 있습니다. 이렇게 하면 이전과 같이 SIGKILL 신호가 전송되어 즉시 종료되지만 이전과 같이 데이터 손실이나 손상이 발생할 수 있습니다. 예:
죽여 -9 1234 5678
예를 들어, 이는 PID 1234 및 5678을 사용하는 프로세스에 SIGKILL 신호를 강제로 보냅니다. 1234를 실행 중인 프로세스에 맞는 PID로 바꾸세요.
Linux 애플리케이션 제어
위에 설명된 단계 덕분에 Linux 명령줄을 사용하여 포트 번호를 사용하여 실행 중인 Linux 프로세스를 빠르게 종료할 수 있습니다. 특히 SIGKILL 신호를 사용하여 프로세스를 종료할 때는 원치 않는 부작용이 발생할 수 있으므로 주의해야 합니다. 결국 시스템이 불안정해지는 것을 원하지 않을 것입니다.
Linux에서 시스템 성능을 더 자세히 살펴보고 싶으십니까? 다음에는 Linux에서 메모리 사용량을 확인해 보세요. 잠재적인 보안 위험이 걱정된다면 Linux에서도 비밀번호를 변경하는 것이 좋습니다.
새로운 Linux 배포판으로 전환해야 합니까? 초보자라면 Linux Mint를 안전하고 안정적인 대안으로 고려해 보세요.