소개
이 랩에서는 프로세스를 식별하고 종료하는 데 중점을 두고 필수적인 Linux 프로세스 관리 기술을 배우게 됩니다. 프로세스 관리는 시스템 리소스를 효과적으로 관리할 수 있도록 해주므로 모든 Linux 사용자 또는 관리자에게 기본적인 기술입니다.
실행 중인 프로세스를 식별하기 위해 ps 명령어를 사용하는 방법과 필요할 때 프로세스를 종료하기 위해 kill 명령어를 사용하는 방법을 배우게 됩니다. 이러한 도구는 시스템 성능을 유지하고 응답하지 않는 애플리케이션을 처리하는 데 필수적입니다.
이 랩을 마치면 프로세스를 식별하고, 속성을 이해하며, 다양한 방법을 사용하여 프로세스를 종료할 수 있게 됩니다. 이러한 기술은 Linux 시스템을 효율적으로 문제 해결하고 관리하는 데 유용합니다.
프로세스 식별
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) 는 "최후의 수단" 옵션입니다. 그 이유는 다음과 같습니다.
- 프로세스가 자체적으로 정리할 수 없습니다.
- 리소스를 일관되지 않은 상태로 남겨둘 수 있습니다.
- 프로세스가 데이터를 쓰고 있는 경우 데이터 손실을 유발할 수 있습니다.
항상 먼저 SIGTERM 을 시도하고, 프로세스가 SIGTERM 에 응답하지 않는 경우에만 SIGKILL 을 사용하십시오.
고급 프로세스 관리
Linux 는 기본적인 ps 및 kill 명령어를 넘어 프로세스를 관리하기 위한 추가 명령어를 제공합니다. 이러한 도구는 프로세스를 식별하고 종료하는 데 더 많은 유연성과 편의성을 제공합니다.
pgrep 명령어
pgrep 명령어를 사용하면 ps의 출력을 시각적으로 스캔하지 않고도 이름으로 프로세스를 찾을 수 있습니다.
pgrep sleep
이 명령어는 이름에 "sleep"이 포함된 모든 프로세스를 찾아 해당 PID 를 출력합니다.
pkill 명령어
pkill 명령어는 pgrep과 kill의 기능을 결합합니다. 즉, 이름으로 프로세스를 찾아 신호를 보냅니다.
## 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
nice 및 renice를 사용한 프로세스 우선 순위
Linux 는 또한 nice 및 renice 명령어를 사용하여 프로세스의 우선 순위를 제어할 수 있도록 합니다.
낮은 우선 순위로 프로세스를 시작해 보겠습니다.
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 프로세스 관리 기술을 배웠습니다.
프로세스 식별: 실행 중인 프로세스를 나열하고 해당 프로세스 ID(PID) 를 찾는 데
ps명령어를 사용하는 방법을 배웠습니다.프로세스 종료: PID 를 사용하여 프로세스에 종료 신호를 보내는
kill명령어를 사용하는 연습을 했습니다.Kill 신호 이해: 정상 종료를 위한 SIGTERM(15) 및 강제 종료를 위한 SIGKILL(9) 을 포함하여 프로세스에 보낼 수 있는 다양한 유형의 신호를 살펴보았습니다.
고급 프로세스 관리: 이름으로 프로세스를 찾고 종료하기 위한
pgrep,pkill,killall과 같은 더 강력한 도구와nice및renice를 사용하여 프로세스 우선 순위를 제어하는 방법을 배웠습니다.
이러한 기술을 통해 다음을 수행할 수 있습니다.
- 시스템 프로세스를 효과적으로 모니터링합니다.
- 응답하지 않는 애플리케이션을 종료합니다.
- 시스템 리소스를 관리합니다.
- 성능 문제를 해결합니다.
프로세스 관리는 Linux 시스템 관리의 기본 측면이며, 이 랩에서 배운 명령어는 Linux 관리자 및 사용자가 시스템 성능과 안정성을 유지하기 위해 매일 사용합니다.



