Linux 프로세스 종료

LinuxBeginner
지금 연습하기

소개

이 랩에서는 프로세스를 식별하고 종료하는 데 중점을 두고 필수적인 Linux 프로세스 관리 기술을 배우게 됩니다. 프로세스 관리는 시스템 리소스를 효과적으로 관리할 수 있도록 해주므로 모든 Linux 사용자 또는 관리자에게 기본적인 기술입니다.

실행 중인 프로세스를 식별하기 위해 ps 명령어를 사용하는 방법과 필요할 때 프로세스를 종료하기 위해 kill 명령어를 사용하는 방법을 배우게 됩니다. 이러한 도구는 시스템 성능을 유지하고 응답하지 않는 애플리케이션을 처리하는 데 필수적입니다.

이 랩을 마치면 프로세스를 식별하고, 속성을 이해하며, 다양한 방법을 사용하여 프로세스를 종료할 수 있게 됩니다. 이러한 기술은 Linux 시스템을 효율적으로 문제 해결하고 관리하는 데 유용합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 95%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

프로세스 식별

Linux 에서 실행 중인 모든 프로그램 또는 애플리케이션은 프로세스로 간주됩니다. 각 프로세스에는 PID(Process ID, 프로세스 ID) 라고 하는 고유 식별자가 있습니다. 프로세스를 종료하려면 먼저 PID 를 사용하여 식별해야 합니다.

ps 명령어를 사용하여 실행 중인 프로세스를 보는 방법을 먼저 배워보겠습니다. 이 명령어는 시스템에서 활성 프로세스에 대한 정보를 표시합니다.

먼저 LabEx VM 환경에서 터미널을 열고 다음 명령을 실행합니다.

ps

현재 터미널 세션에서 실행 중인 프로세스의 기본 목록이 표시됩니다. 출력은 다음과 유사해야 합니다.

  PID TTY          TIME CMD
 2104 pts/0    00:00:00 zsh
 2116 pts/0    00:00:00 ps

이 출력은 다음을 보여줍니다.

  • PID: 프로세스 ID 번호
  • TTY: 프로세스가 실행 중인 터미널 유형
  • TIME: 프로세스가 사용한 CPU 시간
  • CMD: 프로세스를 시작한 명령어

시스템에서 실행 중인 모든 프로세스의 보다 포괄적인 목록을 보려면 다음 명령을 추가 옵션과 함께 사용합니다.

ps -aux

옵션의 의미는 다음과 같습니다.

  • -a: 모든 사용자의 프로세스 표시
  • -u: 자세한 사용자 중심 형식 표시
  • -x: 제어 터미널이 없는 프로세스 포함

출력은 훨씬 더 길고 자세하며 시스템에서 실행 중인 모든 프로세스를 표시합니다.

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1 167936 11876 ?        Ss   10:30   0:01 /sbin/init
root           2  0.0  0.0      0     0 ?        S    10:30   0:00 [kthreadd]
...
labex       2104  0.0  0.1  11108  5456 pts/0    Ss   10:35   0:00 zsh
labex       2130  0.0  0.0   9828  3384 pts/0    R+   10:36   0:00 ps -aux

이제 연습에 사용할 간단한 백그라운드 프로세스를 만들어 보겠습니다.

sleep 300 &
sleep_pid=$!

이 명령어는 300 초 (5 분) 동안 "sleep"(아무것도 하지 않음) 하는 프로세스를 시작합니다. & 기호는 백그라운드에서 실행하고 $!는 가장 최근에 시작된 백그라운드 프로세스의 PID 를 캡처합니다.

프로세스가 실행 중인지 확인해 보겠습니다.

echo "The sleep process ID is: $sleep_pid"
ps | grep sleep

다음과 유사한 출력이 표시되어야 합니다.

The sleep process ID is: 2135
 2135 pts/0    00:00:00 sleep

이제 프로세스를 식별하고 PID 를 찾는 방법을 알았습니다. 다음 단계에서는 이 프로세스를 종료하는 방법을 배우겠습니다.

'kill' 명령어로 프로세스 종료

이제 프로세스와 해당 PID 를 식별했으므로 kill 명령어를 사용하여 프로세스를 종료하는 방법을 배울 수 있습니다. kill 명령어는 프로세스에 신호를 보내 종료하도록 지시합니다.

kill 명령어의 기본 구문은 다음과 같습니다.

kill [options] <PID>

이전 단계에서 생성한 sleep 프로세스를 종료해 보겠습니다. 해당 PID 를 $sleep_pid 변수에 저장했습니다. 다음 명령을 사용하여 종료합니다.

kill $sleep_pid

PID 를 잊어버린 경우 다음을 사용하여 다시 찾을 수 있습니다.

ps | grep sleep

kill 명령어를 실행한 후 프로세스가 종료되었는지 확인합니다.

ps | grep sleep

프로세스가 성공적으로 종료된 경우 출력에 아무것도 표시되지 않거나 grep 프로세스 자체만 표시되어야 합니다. 즉, sleep 프로세스가 더 이상 실행되지 않습니다.

철저하게 확인하려면 ps 명령어를 다시 사용하여 모든 프로세스를 나열할 수 있습니다.

ps -aux | grep sleep

다음과 같은 내용이 표시될 수 있습니다.

labex       2156  0.0  0.0   7236   720 pts/0    S+   10:40   0:00 grep --color=auto sleep

표시된 유일한 프로세스는 grep 명령어 자체이며, 이는 sleep 프로세스가 종료되었음을 나타냅니다.

기본적으로 kill 명령어는 프로세스에 TERM(terminate, 종료) 신호를 보내 프로세스가 정리 작업을 수행한 후 정상적으로 종료될 수 있도록 합니다. 대부분의 경우 프로세스를 종료하기에 충분합니다.

이제 kill 명령어를 사용하여 프로세스를 성공적으로 식별하고 종료했습니다. 이는 Linux 에서 프로세스를 관리하는 데 기본적인 기술입니다.

Kill 시그널 이해

Linux 에서 kill 명령어는 종료 신호뿐만 아니라 다양한 유형의 신호를 프로세스에 보낼 수 있습니다. 이러한 신호를 이해하면 프로세스가 종료되는 방식을 더 효과적으로 제어할 수 있습니다.

먼저, 다음을 실행하여 사용 가능한 모든 신호를 살펴보겠습니다.

kill -l

이렇게 하면 kill 명령어가 보낼 수 있는 모든 신호가 나열됩니다. 출력은 다음과 같습니다.

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
...

가장 일반적으로 사용되는 신호는 다음과 같습니다.

  • SIGTERM (15): kill 명령어가 보내는 기본 신호입니다. 프로세스에 정상적으로 종료하도록 요청합니다.
  • SIGKILL (9): 프로세스를 즉시 강제 종료합니다. 프로세스가 SIGTERM 에 응답하지 않을 때 사용합니다.
  • SIGHUP (1): 전통적으로 구성 파일을 재설정하거나 다시 로드하는 데 사용됩니다.
  • SIGINT (2): 터미널에서 Ctrl+C 를 누르면 전송됩니다.

연습을 위해 다른 sleep 프로세스를 만들어 보겠습니다.

sleep 300 &
sleep_pid=$!
echo "The new sleep process ID is: $sleep_pid"

이제 신호 번호를 사용하여 프로세스에 특정 신호를 보내 보겠습니다.

kill -15 $sleep_pid

이는 SIGTERM(신호 15) 을 보내므로 기본 kill 명령어와 동일합니다.

프로세스가 종료되었는지 확인합니다.

ps | grep sleep

SIGKILL 신호를 시연하기 위해 sleep 프로세스를 하나 더 만들어 보겠습니다.

sleep 300 &
sleep_pid=$!
echo "The third sleep process ID is: $sleep_pid"

이제 SIGKILL 신호를 사용하여 프로세스를 강제로 종료해 보겠습니다.

kill -9 $sleep_pid

프로세스가 종료되었는지 확인합니다.

ps | grep sleep

SIGKILL 신호 (9) 는 "최후의 수단" 옵션입니다. 그 이유는 다음과 같습니다.

  1. 프로세스가 자체적으로 정리할 수 없습니다.
  2. 리소스를 일관되지 않은 상태로 남겨둘 수 있습니다.
  3. 프로세스가 데이터를 쓰고 있는 경우 데이터 손실을 유발할 수 있습니다.

항상 먼저 SIGTERM 을 시도하고, 프로세스가 SIGTERM 에 응답하지 않는 경우에만 SIGKILL 을 사용하십시오.

고급 프로세스 관리

Linux 는 기본적인 pskill 명령어를 넘어 프로세스를 관리하기 위한 추가 명령어를 제공합니다. 이러한 도구는 프로세스를 식별하고 종료하는 데 더 많은 유연성과 편의성을 제공합니다.

pgrep 명령어

pgrep 명령어를 사용하면 ps의 출력을 시각적으로 스캔하지 않고도 이름으로 프로세스를 찾을 수 있습니다.

pgrep sleep

이 명령어는 이름에 "sleep"이 포함된 모든 프로세스를 찾아 해당 PID 를 출력합니다.

pkill 명령어

pkill 명령어는 pgrepkill의 기능을 결합합니다. 즉, 이름으로 프로세스를 찾아 신호를 보냅니다.

## Start two sleep processes
sleep 300 &
sleep 300 &

## Kill all sleep processes
pkill sleep

모든 sleep 프로세스가 종료되었는지 확인합니다.

ps | grep sleep

killall 명령어

pkill과 유사하게 killall 명령어는 이름으로 프로세스를 종료합니다.

## Start two more sleep processes
sleep 300 &
sleep 300 &

## Kill all sleep processes
killall sleep

다시 한 번 확인합니다.

ps | grep sleep

nicerenice를 사용한 프로세스 우선 순위

Linux 는 또한 nicerenice 명령어를 사용하여 프로세스의 우선 순위를 제어할 수 있도록 합니다.

낮은 우선 순위로 프로세스를 시작해 보겠습니다.

nice -n 10 sleep 300 &

nice 값은 -20(최고 우선 순위) 에서 19(최저 우선 순위) 까지입니다. 기본값은 0 입니다. root 사용자만 음수 nice 값을 설정할 수 있습니다.

renice를 사용하여 실행 중인 프로세스의 우선 순위를 변경할 수 있습니다.

sleep_pid=$!
echo "Sleep process ID with lower priority: $sleep_pid"
renice -n 15 -p $sleep_pid

새로운 우선 순위를 확인해 보겠습니다.

ps -o pid,nice,cmd -p $sleep_pid

마지막으로 이 프로세스를 종료합니다.

kill $sleep_pid

이러한 고급 프로세스 관리 명령어는 여러 프로세스를 관리하고 시스템 리소스를 제어하는 보다 효율적인 방법을 제공합니다. 이는 특히 시스템이 바쁘거나 성능 문제를 해결할 때 유용합니다.

요약

이 랩에서는 시스템 관리 및 문제 해결에 유용한 필수적인 Linux 프로세스 관리 기술을 배웠습니다.

  1. 프로세스 식별: 실행 중인 프로세스를 나열하고 해당 프로세스 ID(PID) 를 찾는 데 ps 명령어를 사용하는 방법을 배웠습니다.

  2. 프로세스 종료: PID 를 사용하여 프로세스에 종료 신호를 보내는 kill 명령어를 사용하는 연습을 했습니다.

  3. Kill 신호 이해: 정상 종료를 위한 SIGTERM(15) 및 강제 종료를 위한 SIGKILL(9) 을 포함하여 프로세스에 보낼 수 있는 다양한 유형의 신호를 살펴보았습니다.

  4. 고급 프로세스 관리: 이름으로 프로세스를 찾고 종료하기 위한 pgrep, pkill, killall과 같은 더 강력한 도구와 nicerenice를 사용하여 프로세스 우선 순위를 제어하는 방법을 배웠습니다.

이러한 기술을 통해 다음을 수행할 수 있습니다.

  • 시스템 프로세스를 효과적으로 모니터링합니다.
  • 응답하지 않는 애플리케이션을 종료합니다.
  • 시스템 리소스를 관리합니다.
  • 성능 문제를 해결합니다.

프로세스 관리는 Linux 시스템 관리의 기본 측면이며, 이 랩에서 배운 명령어는 Linux 관리자 및 사용자가 시스템 성능과 안정성을 유지하기 위해 매일 사용합니다.