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



Linux 시스템에서 특정 프로세스가 포트를 점유하고 있는데, 그냥 없애버리고 싶은 상황을 겪어본 적이 있나요? 앱이 멈춰 버렸거나, 몰래 숨어들어 네트워크 리소스를 점유하는 프로세스가 있을까 봐 걱정될 수도 있습니다.이유가 무엇이든, 해당 프로세스를 찾아서 종료하는 방법을 알면 많은 골칫거리를 줄일 수 있습니다.다행히 Linux는 fuser, lsof, netstat 과 같은 몇 가지 편리한 명령어를 제공합니다.이 명령어들을 사용하면 명령줄에서 특정 포트를 사용하는 프로세스를 파악하고 종료할 수 있습니다.

물론, 터미널 작업에 익숙하지 않다면 처음에는 다소 어렵게 느껴질 수 있습니다.하지만 이러한 도구에 익숙해지면 네트워크 문제를 해결하고, 오작동하는 앱을 중지하고, 잠재적인 보안 위협을 상당히 빠르게 제거할 수 있습니다.다만, kill -9 명령으로 프로세스를 강제 종료하는 것이 항상 효과적인 것은 아니며, 주의하지 않으면 데이터 손실이 발생할 수 있으므로 주의하세요.

fuser 명령을 사용하여 Linux 프로세스를 종료하는 방법

방법 1: 사용fuser

아마 이게 가장 쉬운 방법일 겁니다.이 fuser명령어는 어떤 프로세스가 특정 포트나 리소스에 접근하고 있는지 알려줍니다.포트 번호만 알고 있고, 누가 그 포트에서 뭘 하고 있는지 알고 싶을 때 정말 유용합니다.

왜 도움이 될까요? 포트에 연결된 프로세스 ID(PID)를 나열해 주기 때문에 너무 많이 찾아볼 필요가 없습니다.언제 적용되나요? 보통 포트가 막혔거나 “포트가 이미 사용 중”이라는 충돌이 발생할 때입니다.예상은? 실행하면 fuserPID를 얻을 수 있고, 추가하면 -k해당 프로세스가 종료됩니다.

일반적인 구문은 다음과 같습니다.

fuser -n tcp 80

tcp필요한 경우 를 로 바꾸고 udp, 80대상 포트로 바꾸세요. TCP 포트 80을 사용하는 프로세스가 나열됩니다.이러한 프로세스를 종료하려면 다음을 추가하세요 -k.

sudo fuser -k -n tcp 80

특히 해당 프로세스의 소유자가 아닌 경우, 슈퍼유저 로 실행하는 것이 종종 필요합니다.일부 설정에서는 슈퍼유저로 실행하지 않으면 sudo모든 프로세스가 나열되거나 종료되지 않을 수 있습니다.

주의: -KILLinstead of 를 사용하면 -kSIGKILL을 전송하여 프로세스를 정리하지 않고 강제 종료합니다.이 방법이 효과가 있는 경우도 있지만, 데이터 손실이 발생할 수 있으므로 SIGTERM으로 해결할 수 없는 경우에만 사용하세요.예:

sudo fuser -KILL -n tcp 80

방법 2: 사용lsof

특히 포트를 점유하고 있는 항목에 대한 자세한 정보가 필요한 경우, 또 다른 방법은 lsof명령을 사용하는 것입니다.이 명령은 열려 있는 파일을 표시하며, Linux 환경에서는 네트워크 소켓도 파일입니다.

왜 이 기능을 선택해야 할까요? 프로세스 목록과 PID, 그리고 연결 방식에 대한 정보를 빠르게 확인하고 싶을 때입니다.언제 사용해야 할까요? 일반적으로 이 기능을 fuser사용할 수 없거나 더 자세한 정보를 원할 때 사용합니다.기본 명령은 다음과 같습니다.

lsof -i tcp:80

이는 TCP 포트 80을 통해 수신 또는 연결된 프로세스를 표시합니다. PID만 가져오려면 다음을 수행하면 됩니다.

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

일부 프로세스가 정상적인 신호로 종료를 거부하는 경우 다음을 사용하여 강제로 종료할 수 있습니다 -9.

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

주의: 항상 그렇듯이, 해당 프로세스가 중요한 작업을 수행하는 경우 강제 종료가 문제를 일으킬 수 있습니다.따라서 신중하게 사용하세요.

방법 3: 사용netstat

이건 조금 오래되었지만 많은 경우에 여전히 유용합니다.netstat올바른 플래그를 사용하면 PID와 함께 활성 네트워크 연결과 수신 소켓을 표시합니다.

왜 굳이 그럴까요? 특정 포트에서 어떤 프로그램이 수신 대기 중인지 확인하고 싶을 때, 어쩌면 포트를 종료하기 전에 말이죠.언제요? 시스템에 포트가 점유된 것 같은데, 무슨 이유인지 확실하지 않을 때입니다.명령은 다음과 같습니다.

sudo netstat -p tcp -l -n

이 함수는 프로세스 정보와 함께 수신 대기 중인 TCP 소켓을 나열합니다.80번과 같은 특정 포트를 필터링하려면 와 같은 다른 도구와 함께 사용해야 할 수 있습니다 grep.이 netstat함수는 포트별로 직접 필터링하지 않기 때문입니다.

sudo netstat -p tcp -l -n | grep :80

출력에서 PID를 확인한 후 다음을 사용하여 종료합니다.

sudo kill 1234

또는 강제로 중단하려면:

sudo kill -9 1234

참고: netstat은 모든 프로세스 정보를 보려면 루트 권한이 필요한 경우가 많으므로 대부분 sudo가 필요합니다.또한, PID를 직접 종료하면 주의하지 않으면 관련 없는 프로세스가 종료될 수 있으므로 명령을 실행하기 전에 다시 한번 확인하세요.

Linux 애플리케이션 제어

전반적으로 이 명령들은 특정 네트워크 포트에 갇힌 프로세스를 해결하는 데 매우 유용한 도구입니다.다만, 강제 종료는 kill -9때때로 문제를 일으키거나 데이터 손상을 초래할 수 있으므로 주의해야 합니다.확실하지 않다면 좀 더 부드러운 SIGTERM 명령을 먼저 사용해 보세요.

보안에 신경 쓰인다면, 포트에 누가 또는 무엇이 있는지 확인하는 좋은 방법입니다.아니면 실수로 튀어나온 악성 프로세스를 종료할 수도 있습니다.어떤 설정에서는 처음에는 잘 작동했지만, 다른 설정에서는 그렇지 않았습니다.리눅스의 무작위성은 흥미로운 환경을 만들어냅니다.

물론, 리눅스는 때때로 필요 이상으로 어렵게 만들어야 합니다.

요약

  • fuser -n tcp/udp [port]포트에서 프로세스를 찾아 종료하는 데 사용합니다.
  • lsof -i tcp:port식별하고 kill프로세스를 진행하는 데 사용합니다.
  • netstat -p tcp -l -n활성 수신 소켓을 보고 PID를 얻는 데 활용합니다.
  • 강제 종료를 사용할 때는 조심해야 합니다.특히 -9;를 사용하면 데이터 손실이나 불안정성이 발생할 수 있습니다.

마무리

처음에는 너무 많은 것처럼 보일 수 있지만, 익숙해지면 문제가 있는 프로세스를 종료하는 것이 자연스럽게 느껴집니다.어떤 프로세스를 종료하는지 다시 한번 확인하는 것을 잊지 마세요.중요한 시스템 서비스가 실수로 다운되는 것은 누구도 원치 않을 것입니다.이 글이 성가신 포트 충돌 문제를 해결하고 Linux 시스템이 원활하게 작동하는 데 도움이 되기를 바랍니다.



이 글이 도움이 되었나요?