본문 바로가기
일반IT/리눅스

리눅스 서버 탐정 되기 🕵️‍♂️ 포트 번호로 프로세스 추적하고 마스터 프로세스 찾는 법

by gasbugs 2025. 10. 11.

안녕하세요! 리눅스 서버를 관리하다 보면 이런 궁금증이 생길 때가 많습니다. "어? 지금 80번 포트를 어떤 서비스가 사용하고 있지?", "이 웹서버는 프로세스가 여러 개인데, 어떤 게 진짜 메인 프로세스일까?"

 

오늘은 이런 궁금증을 해결하는 '리눅스 탐정'이 되어보는 시간을 갖겠습니다. 단 하나의 포트 번호라는 단서에서 시작해, 용의자(프로세스)를 특정하고, 그 배후에 있는 마스터 프로세스까지 찾아내는 흥미진진한 과정을 함께하시죠! 🕵️‍♀️

 

 

1단계: 첫 번째 단서 - 포트 번호로 프로세스 용의자 찾기 📡

모든 수사는 작은 단서에서 시작됩니다. 우리의 첫 번째 단서는 바로 '포트 번호'입니다. 특정 포트에서 들어오는 요청을 누가 받고 있는지 확인하면, 용의선상에 올릴 프로세스를 특정할 수 있습니다.

이때 사용하는 가장 현대적이고 강력한 도구가 바로 ss 명령어입니다. (netstat이라는 클래식한 도구도 있지만, ss가 더 빠르고 많은 정보를 제공합니다.)

sudo ss -tlpn | grep ':[포트번호]'

# 80번 포트를 예시로 찾아봅시다.
sudo ss -tlpn | grep ':80'

 

명령어가 조금 복잡해 보이지만, 옵션의 의미를 알면 간단합니다.

  • -t: TCP 프로토콜만 보여줘.
  • -l: Listening (연결을 기다리는) 상태인 것만 보여줘.
  • -p: 해당 포트를 사용하는 Process 정보를 보여줘. (가장 중요!)
  • -n: 포트 번호나 IP 주소를 Numeric (숫자) 형태로 보여줘. (빠른 확인 가능)

이 명령어를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

LISTEN 0  511  0.0.0.0:80  0.0.0.0:* users:(("apache2",pid=1337,fd=4))

 

자, 범인은 나왔군요! users: 부분을 보면 apache2라는 이름의 애플리케이션이 PID(Process ID) 1337으로 실행되며 80번 포트를 점유하고 있음을 확인했습니다. 첫 번째 수사 단계 완료!

 

2단계: 심층 수사 - 프로세스 계층 구조 파헤치기 👨‍👩‍👧

apache2라는 용의자를 특정했지만, 수사는 여기서 끝나지 않습니다. ps 명령어로 apache2 프로세스를 조회해 보면, 여러 개의 프로세스가 동시에 실행 중인 것을 발견하게 될 겁니다.

 

이는 웹서버 같은 프로그램이 효율적인 업무 처리를 위해 마스터 프로세스 한 개가 여러 개의 워커 프로세스를 생성하고 관리하는 구조로 동작하기 때문입니다. 마치 레스토랑의 매니저(마스터)가 여러 명의 요리사와 서빙 직원(워커)들을 관리하는 것과 같죠. 🍳

우리의 임무는 이들 중 진짜 '보스', 즉 마스터 프로세스를 찾아내는 것입니다. 이때 사용하는 명령어는 ps -ef 입니다.

ps -ef | grep apache2

 

결과는 아래와 비슷하게 나타납니다.

UID    PID   PPID   C STIME TTY      TIME     CMD
root   1337     1    0 10:30 ?    00:00:00   /usr/sbin/apache2 -k start
www-data 1380  1337   0 10:30 ?    00:00:00   /usr/sbin/apache2 -k start
www-data 1381  1337   0 10:30 ?    00:00:00   /usr/sbin/apache2 -k start

 

여기서 마스터 프로세스를 가리키는 결정적인 증거들을 찾아봅시다.

  • 증거 1: 실행 사용자(UID)가 root이다.
    • 마스터 프로세스는 시스템 자원에 접근하고 포트를 여는 등 높은 권한이 필요하므로 보통 root 계정으로 실행됩니다. 반면, 워커 프로세스들은 보안을 위해 권한이 낮은 사용자(www-data 등)로 실행됩니다.
  • 증거 2: 부모 프로세스 ID(PPID)가 1이다.
    • PPID가 1이라는 것은 해당 프로세스가 시스템이 부팅될 때 가장 먼저 실행되는 프로세스(systemd 또는 init)에 의해 직접 실행되었음을 의미합니다. 즉, 이 프로세스 트리의 '시조'인 셈이죠.
  • 증거 3: 다른 워커들의 부모가 바로 이 프로세스다.
    • 다른 apache2 프로세스들의 PPID를 보세요. 모두 1337을 가리키고 있죠? 이것이 바로 PID 1337이 이들의 부모, 즉 마스터 프로세스라는 가장 확실한 증거입니다.

모든 증거가 PID 1337을 마스터 프로세스로 지목하고 있습니다.

 

3단계: 수사 보고서 작성 - 결과 안전하게 파일로 저장하기 ✍️

모든 수사가 끝났으니, 결과를 보고서로 남겨야 합니다. 알아낸 애플리케이션 이름(소문자)과 마스터 PID를 /opt/process.txt 같은 파일에 저장해 봅시다.

여기서 주의할 점! /opt나 /etc 같은 시스템 디렉터리는 root 권한이 있어야 파일을 생성할 수 있습니다. 많은 분들이 sudo echo "내용" > /opt/file.txt 와 같은 실수를 하곤 합니다. 이 명령어는 echo만 sudo로 실행될 뿐, 파일에 쓰는 역할(>)은 현재 사용자 권한으로 실행되어 'Permission denied' 오류를 만나게 됩니다.

가장 안전하고 확실한 방법은 바로 tee 명령어를 사용하는 것입니다.

printf "apache2\n1337\n" | sudo tee /opt/process.txt

 

이 명령어는 다음과 같이 동작합니다.

  1. printf "apache2\n1337\n": 첫 줄에 apache2, 줄바꿈 후(\n) 두 번째 줄에 1337이라는 텍스트를 생성합니다.
  2. | (파이프): 생성된 텍스트를 다음 명령어의 입력으로 전달합니다.
  3. sudo tee /opt/process.txt: root 권한으로 tee를 실행합니다. tee는 파이프로 전달받은 입력을 화면과 파일 양쪽에 동시에 써주는 역할을 합니다. 덕분에 권한 문제 없이 안전하게 파일을 생성할 수 있습니다.

마무리하며

축하합니다! 여러분은 이제 리눅스 서버의 유능한 탐정이 되셨습니다. 🎉

오늘 우리는 포트 번호(ss)라는 작은 단서로 시작해, 프로세스의 가족 관계(ps -ef)를 파헤쳐 마스터 프로세스를 찾아냈고, 수사 결과를 권한 문제 없이 깔끔하게 파일(tee)로 남기는 방법까지 배웠습니다.

이 세 가지 명령어는 시스템을 모니터링하고 문제를 해결하는 데 반드시 필요한 기술이므로, 꼭 기억해 두셨다가 실제 서버 운영에 활용해 보시길 바랍니다!


태그: Linux, 리눅스, 서버관리, 시스템엔지니어링, DevOps, 프로세스, 포트, PID, ss, ps, tee