Processes

Processes

1. 프로세스/서비스 관리 아키텍처 및 개념

1-1. 프로세스 관리

개념

  • 프로세스(Process): 실행 중인 프로그램. Linux에서 PID(Process ID)로 관리.
  • 프로세스 상태: Running, Sleeping, Stopped, Zombie
  • 우선순위: nice 값으로 조절 가능, 기본값 0, 높을수록 낮은 우선순위

주요 명령어

명령어 설명
ps aux 현재 실행중인 모든 프로세스 출력
top / htop 실시간 프로세스 모니터링, CPU/Memory 사용량 확인
kill <PID> 특정 프로세스 종료
killall <process_name> 이름으로 프로세스 종료
nice -n <value> <command> 프로세스 우선순위 설정 후 실행
renice <value> -p <PID> 실행 중인 프로세스 우선순위 변경

아키텍처 그림

┌─────────────┐
│  User Space │
│ ┌─────────┐ │
│ │ bash/zsh│ │
│ └────┬────┘ │
└──────┼──────┘
       │ Commands (ps/top/kill/nice)
┌──────▼──────┐
│  Kernel     │
│  ┌────────┐│
│  │ Scheduler│
│  └────────┘│
└──────┼──────┘
       │
┌──────▼──────┐
│  Hardware   │
└─────────────┘

1-2. 서비스 관리 (systemd)

개념

  • Systemd: modern Linux init 시스템

  • Unit 파일: 서비스 정의 파일 (/etc/systemd/system/*.service)

  • 기능

    • 서비스 시작/중지/재시작
    • 부팅 시 자동 실행
    • 의존성 관리
    • 로그 통합 (journalctl)

주요 명령어

명령어 설명
systemctl start <service> 서비스 시작
systemctl stop <service> 서비스 중지
systemctl restart <service> 재시작
systemctl enable <service> 부팅 시 자동 시작
systemctl status <service> 서비스 상태 확인
journalctl -u <service> 해당 서비스 로그 확인

Unit 파일 구조

[Unit]
Description=My Test Service
After=network.target

[Service]
ExecStart=/usr/bin/python3 /home/ubuntu/test_service.py
Restart=always
User=ubuntu

[Install]
WantedBy=multi-user.target

systemd 아키텍처 그림

┌─────────────┐
│  systemctl  │  ← CLI
└─────┬───────┘
      │
┌─────▼───────┐
│  systemd    │
│  ┌────────┐ │
│  │ Unit   │ │
│  │ Manager│ │
│  └────────┘ │
└─────┬───────┘
      │
┌─────▼───────┐
│ Kernel (PID │
│  / cgroups) │
└─────────────┘

1-3. 로그 관리

개념

  • 로그 종류

    • /var/log/syslog, /var/log/auth.log → rsyslog
    • systemd 기반 서비스 로그 → journalctl
  • 로그 관리 필요성

    • 디스크 공간 보호
    • 오래된 로그 아카이브
    • 실시간 문제 추적

주요 명령어/툴

명령어/툴 설명
journalctl -xe systemd 로그 실시간 확인
logrotate 로그 파일 회전 및 압축
/etc/logrotate.d/ 개별 로그 파일 정책 정의

로그 회전 예시

/var/log/myapp.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

로그 아키텍처 그림

┌───────────────┐
│  Services     │
│  / Processes  │
└──────┬────────┘
       │ Logs
┌──────▼────────┐
│  journald     │
│  rsyslog      │
└──────┬────────┘
       │
┌──────▼────────┐
│ logrotate     │
│  Archive      │
└───────────────┘

2. Ubuntu 22.04 실습 시나리오

환경

  • OS: Ubuntu 22.04 LTS
  • 사용자: ubuntu
  • 설치 필요: htop, nano, python3

Step 1. 프로세스 확인 및 관리

  1. 현재 실행중인 프로세스 확인
ps aux | less
top
htop  # 설치 필요: sudo apt install htop
  1. 특정 프로세스 종료
kill <PID>
killall htop
  1. 프로세스 우선순위 조절
nice -n 10 sleep 300 &
renice 5 -p <PID>

Step 2. systemd 서비스 관리 실습

  1. 테스트용 서비스 파일 생성
sudo nano /etc/systemd/system/mytest.service

내용:

[Unit]
Description=My Test Service
After=network.target

[Service]
ExecStart=/usr/bin/python3 /home/ubuntu/test_service.py
Restart=always
User=ubuntu

[Install]
WantedBy=multi-user.target
  1. 서비스 파일 적용 및 시작
sudo systemctl daemon-reload
sudo systemctl start mytest.service
sudo systemctl status mytest.service
  1. 부팅 시 자동 시작
sudo systemctl enable mytest.service
  1. 로그 확인
journalctl -u mytest.service -f

Step 3. 로그 관리 실습

  1. 로그 회전 파일 생성
sudo nano /etc/logrotate.d/myapp

내용:

/home/ubuntu/myapp.log {
    daily
    rotate 5
    compress
    missingok
    notifempty
}
  1. 테스트용 로그 작성
echo "test log $(date)" >> /home/ubuntu/myapp.log
sudo logrotate -f /etc/logrotate.d/myapp

3. 학습 포인트 요약

  • ps/top/htop → 프로세스 확인, CPU/Memory 모니터링
  • kill/killall/nice/renice → 프로세스 제어 및 우선순위 조정
  • systemctl + unit 파일 → 서비스 관리, 의존성 관리, 부팅 자동화
  • journalctl → systemd 기반 로그 확인
  • logrotate/rsyslog → 로그 회전 및 아카이빙, 안정적 운영
마지막 수정일자