Linux Bash shell script

Bash Shell Script 프로세스 종료 및 제어 (kill, ps, top)

임베디드 친구 2025. 1. 31. 09:16
728x90
반응형

Linux에서 프로세스는 시스템 자원을 효율적으로 관리하고 작업을 수행하기 위해 필수적인 요소입니다. 이번 포스팅에서는 프로세스를 관리하고 종료하는 데 유용한 kill, ps, 그리고 top 명령어를 소개하겠습니다. 또한 각 명령어의 사용 예제와 함께 실습할 수 있도록 간단한 스크립트를 제공합니다.


1. 프로세스 확인 (ps 명령어)

ps 명령어는 현재 실행 중인 프로세스를 확인하는 데 사용됩니다. ps 명령어는 다양한 옵션을 제공하여 원하는 프로세스 정보를 필터링하거나 형식을 지정할 수 있습니다.

주요 옵션

  • ps: 기본적으로 현재 쉘에서 실행 중인 프로세스 표시
  • ps -e: 시스템에서 실행 중인 모든 프로세스 표시
  • ps -f: 프로세스를 포맷된 형태로 상세히 표시
  • ps aux: 모든 사용자와 관련된 모든 프로세스 상세히 표시

사용 예제

# 현재 쉘에서 실행 중인 프로세스
ps

# 모든 프로세스 확인
ps -e

# 포맷된 출력 확인
ps -ef

# 특정 사용자(user)의 프로세스 확인
ps -u username

# 특정 프로세스를 이름으로 검색
ps aux | grep process_name

2. 실시간 프로세스 관리 (top 명령어)

top 명령어는 실시간으로 시스템에서 실행 중인 프로세스와 자원 사용 상태를 모니터링하는 데 사용됩니다.

주요 기능

  • CPU, 메모리, 스왑 사용량 실시간 모니터링
  • 특정 프로세스에 우선순위 변경 또는 종료
  • 키보드 단축키로 동작 제어

주요 단축키

  • q: top 종료
  • k: 프로세스 종료 (PID 입력 필요)
  • r: 프로세스 우선순위 변경 (PID 입력 필요)
  • h: 도움말 표시
  • s: 업데이트 주기 변경

사용 예제

# top 실행
$ top

# h 키를 눌러 명령어 도움말 확인

top 명령어는 시스템 자원 관리에 매우 유용하며, 특정 프로세스의 비정상적인 동작을 탐지할 때 특히 유용합니다.


3. 프로세스 종료 (kill 명령어)

kill 명령어는 특정 프로세스를 종료하거나 제어 신호를 보낼 때 사용됩니다. 종료하려는 프로세스의 PID를 알아야 하며, 이를 위해 ps 또는 top을 활용합니다.

주요 옵션

  • kill [PID]: 프로세스를 종료 (기본적으로 SIGTERM 신호)
  • kill -9 [PID]: 강제 종료 (SIGKILL 신호)
  • kill -s [SIGNAL] [PID]: 특정 신호 전달

주요 신호

  • SIGTERM (15): 프로세스 종료 요청 (기본 신호)
  • SIGKILL (9): 프로세스 강제 종료
  • SIGHUP (1): 프로세스 재시작
  • SIGSTOP (19): 프로세스 일시 중단
  • SIGCONT (18): 일시 중단된 프로세스 재개

사용 예제

# PID가 1234인 프로세스 종료
kill 1234

# 강제로 종료 (SIGKILL)
kill -9 1234

# 프로세스 재시작
kill -1 1234

# 특정 이름의 프로세스를 종료하는 예제
ps aux | grep process_name | awk '{print $2}' | xargs kill

4. Bash 스크립트 예제: 프로세스 관리

다음은 프로세스의 상태를 확인하고 종료하는 간단한 Bash 스크립트입니다.

스크립트 내용

#!/bin/bash

# 사용법 출력
if [ "$#" -lt 2 ]; then
  echo "Usage: $0 <process_name> <signal>"
  echo "Example: $0 my_process SIGKILL"
  exit 1
fi

PROCESS_NAME=$1
SIGNAL=$2

# 프로세스 찾기
PID=$(ps aux | grep "$PROCESS_NAME" | grep -v grep | awk '{print $2}')

if [ -z "$PID" ]; then
  echo "Process '$PROCESS_NAME' not found."
  exit 1
fi

# 프로세스 종료
kill -s "$SIGNAL" "$PID"

if [ $? -eq 0 ]; then
  echo "Process '$PROCESS_NAME' (PID: $PID) terminated with signal $SIGNAL."
else
  echo "Failed to terminate process '$PROCESS_NAME'."
fi

실행 방법

  1. 스크립트를 저장합니다 (예: process_manager.sh).

  2. 실행 권한을 부여합니다:

    chmod +x process_manager.sh
  3. 스크립트를 실행합니다:

    ./process_manager.sh <process_name> <signal>

예:

./process_manager.sh my_process SIGKILL

5. 결론

이번 포스팅에서는 Linux에서 프로세스를 확인, 제어, 종료하는 데 유용한 명령어 ps, top, kill을 알아보았습니다. 또한 Bash 스크립트를 활용하여 프로세스를 관리하는 방법도 살펴보았습니다. 이를 활용하면 시스템 관리와 문제 해결이 더욱 효율적이고 체계적으로 이루어질 것입니다.

반응형