ps, pgrep, pkill 등을 사용하여 Linux 프로세스 종료 방법 마스터하기

리눅스에서 프로세스를 관리하는 것은 처음에는 새로운 시스템 관리자에게 어려워 보일 수 있습니다. 그러나 조금의 설명과 데모를 통해 pskill과 같은 명령행 도구를 사용하여 리눅스 프로세스를 찾고 종료하는 방법을 배울 수 있습니다.

이 글에서는 실행 중인 프로세스와 오류가 있는 프로세스를 찾는 명령어, 실행 중인 프로세스를 종료하는 명령어, 백그라운드 프로세스를 찾는 명령어 등 리눅스 운영 체제에서 모든 것에 대해 자세히 알아보게 됩니다.

글의 끝에는 리눅스 명령행에서 프로세스 식별 번호 (PID)를 기반으로 프로세스를 관리하는 방법을 마치 전문가처럼 할 수 있게 될 것입니다. 리눅스에서 프로세스 관리 명령어에 대해 모두 알아보려면 계속 읽어보세요!

전제 조건

이 글은 리눅스에서 프로세스를 관리하는 방법에 대한 설명입니다. 직접 실습하려면 다음이 필요합니다:

  • A Linux host, which can be a virtual machine or a physical machine.
  • PowerShell 예제를 시도하려면 리눅스 호스트에 PowerShell 7.1.1을 설치해야 합니다.
  • A non-root user account. While root access is not required, there will be an example where the root user can kill the running process of another user.

사용할 리눅스 배포판은 선택에 따라 다릅니다. 이 글은 우분투 20.04 LTS를 기반으로 작성되었지만, 명령어는 리눅스 운영 체제에서 표준입니다.

시작할 준비가 되었습니까? 좋습니다, 시작해 봅시다.

리눅스에서 프로세스 관리하기

가끔 Linux 시스템에서 실행 중인 프로세스를 중지해야할 상황에 직면할 수 있습니다. 예를 들어, 일정에 따라 실행되는 bash 스크립트가 있을 수 있습니다. 이 bash 스크립트는 cron 작업(Linux 프로세스 스케줄러)을 통해 다른 사용자로 실행되도록 구성되어 있습니다.

이 스크립트는 때로는 스크립트의 실패로 이어지는 잘못된 프로세스를 생성할 수 있습니다. 시스템을 재부팅하거나 스크립트를 중지하지 않고 이러한 잘못된 프로세스를 어떻게 종료할 수 있을까요?

다음 섹션에서는 Linux 시스템에서 프로세스를 찾고 종료 또는 kill하는 데 사용되는 명령어를 안내합니다. 각 섹션은 이전 섹션을 기반으로 구성됩니다. Linux에 기본으로 포함된 ps, top, pgrep, kill, pkill 명령어에 대해 알아보게 될 것입니다.

보너스로 Linux 기본 명령어가 마음에 들지 않는다면 PowerShell 동등한 명령어인 Get-ProcessStop-Process도 포함되어 있습니다.

프로세스 찾기 도구

프로세스를 종료하기 전에 대상이 되는 올바른 프로세스를 찾아야 합니다. 고유한 PID를 사용하여 정확한 대상을 설정할 수 있습니다. 종료할 올바른 프로세스를 찾는 방법에 대해 계속 읽어보세요.

ps 명령어를 사용하여 프로세스 정보 표시하기

프로세스 상태 또는 ps 명령은 Linux 시스템에서 실행 중인 프로세스에 관련된 정보를 표시합니다. ps를 사용하여 실행 중인 프로세스와 백그라운드 프로세스를 식별할 수 있습니다.

ps 명령은 기본적으로 현재 사용자의 유효 사용자 식별자(EUID)에 대한 모든 프로세스를 표시합니다. 아래에 표시된대로 ps 명령을 실행하면 사용자가 종료할 수 있는 모든 실행 중인 프로세스를 반환합니다.

ps
Displaying processes matching the EUID (effective user ID) for the user bkindle.

top 명령을 사용하여 확장된 프로세스 정보 찾기

실행 중인 프로세스와 시스템 메트릭에 대한 지속적으로 업데이트되는 정보를 찾으려는 경우 top 명령을 사용할 수 있습니다. top 명령은 일정한 간격으로 화면에 프로세스 정보를 업데이트합니다.

top 명령을 실행하면 PID뿐만 아니라 CPU 및 메모리 사용률, Nice 값 (CPU 스케줄링 프로세스 우선순위) 및 Linux 커널에서 설정한 프로세스 우선순위(PR)도 포함된 프로세스 세부 정보가 표시됩니다.

새로운 또는 경험있는 시스템 관리자에게 top 명령은 주요 시스템 리소스와 프로세스를 관리하는 주요 도구입니다. 아래에 표시된대로 top 명령 출력은 ps 명령보다 더 많은 프로세스 정보와 전체 시스템 메트릭을 표시합니다.

The top command on Ubuntu Desktop 20.04 LTS showing all running PID’s.

htoptop의 향상된 버전으로, 컬러화된 터미널 출력 등 다양한 개선 사항이 포함되어 있습니다.

어떤 경우에는 프로세스가 사용하는 메모리 또는 CPU 자원을 검사하고 싶을 수도 있습니다. 이 경우, 아래에 나와있는 것처럼 topp 스위치를 사용할 수 있습니다.

top -p 2113
The top command displaying information on only one PID, 2113.

아마도 특정 사용자의 모든 실행 중인 프로세스를 표시해야 할 수도 있습니다. top 명령은 특정 사용자의 프로세스만 표시하기 위한 u 스위치를 제공합니다. 아래 예제에서는 사용자 ID가 bkindle과 일치하는 PID만 표시됩니다.

top -u bkindle
The top command displaying only processes for the user bkindle.

pgrep 명령을 사용하여 특정 프로세스 PID 찾기

pgrep 는 원래 Solaris 명령이었으나 Linux에서 사용하기 위해 이식되었습니다. grep 명령의 검색 기능과 ps의 프로세스 관리 기능을 결합한 pgrep은 정확한 대상 프로세스를 찾는 데 유연성을 제공합니다.

ps는 더 많은 정보를 표시하지만, pgrep은 반환된 프로세스의 PID만 반환하도록 설계되었습니다. pgrep다양한 사용 가능한 검색 매개변수를 사용하여 프로세스를 찾는 데 도움이 됩니다. 다음 예제에서는 pgrepvmtoolsd와 일치하는 프로세스를 검색하는 것을 보여줍니다.

pgrep vmtoolsd
Using pgrep to obtain all PIDs associated with vmtoolsd.

동일하게, u 스위치를 사용하여 특정 사용자와 관련된 프로세스만 검색하도록 사용자 ID를 지정합니다. 아래에 표시된대로, 사용자 bkindlevmtoolsd 프로세스에 대해서만 단일 PID가 반환됩니다.

pgrep -u bkindle vmtoolsd
Retrieving the specific PID for the vmtoolsd process associated with the user bkindle.

Linux에서 PowerShell의 Get-Process를 사용하여 프로세스 찾기

전형적인 Linux 명령은 훌륭하게 작동하지만, PowerShell이 Linux 프로세스도 관리할 수 있는 것을 알고 계셨나요? Get-Process cmdlet은 Linux의 ps 명령과 유사하게 작동하며 프로세스 정보를 반환합니다. 예를 들어, 현재 사용자인 bkindle에 의해 실행 중인 모든 프로세스를 찾아야 할 수도 있습니다. 아래에 표시된대로 사용자 bkindle의 모든 PID( Get-Process에서의 ID로 레이블링됨)를 찾습니다.

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'
Retrieving Linux PID’s with PowerShell’s Get-Process cmdlet.

관련 정보: PowerShell Where-Object를 사용하여 모든 것 필터링하는 방법

다양한 프로세스를 찾는 방법을 배웠으니, 이어서 Linux에서 프로세스를 종료하거나 강제 종료하는 모든 방법을 알아보세요!

Linux에서 Kill 명령을 사용하여 프로세스 종료하기

이전 섹션에서, 기본 Linux 및 PowerShell 명령을 사용하여 kill 신호를 보낼 프로세스의 PID를 찾는 방법을 배웠습니다. 다음 섹션에서는 killpkill 프로그램, 관련 신호 및 명령줄 스위치를 사용하는 방법에 대해 설명합니다.

Linux 신호 및 프로세스 관리

신호는 Linux가 운영 체제에서 실행 중인 프로세스와 통신하는 방법입니다. kill 명령이 프로세스를 종료하는 데 사용하는 주요 신호는 다음과 같습니다:

  • 1 (SIGHUP) – 대화형 프로그램을 종료하고 데몬 (백그라운드 서비스)이 사용하는 구성 파일을 다시 읽도록 합니다.
  • 9 (SIGKILL) – 정상적인 종료 작업을 수행하지 않고 프로세스를 강제로 종료합니다.
  • 15 (SIGTERM) – 프로세스가 정상적으로 종료되도록 허용하며, 종료 시 열려 있는 파일을 닫습니다. 이는 kill 명령을 사용할 때 숫자를 지정하지 않았을 때 사용되는 기본 신호입니다.

이 문서는 프로세스를 종료하는 데 사용되는 주요 신호 세 가지에만 초점을 맞추었지만, 총 64개의 사용 가능한 신호가 있습니다. 신호 및 해당 번호 목록을 얻으려면 kill -l을 사용하세요.

Great video on understanding process signals

이제 프로세스를 종료하는 데 사용되는 주요 신호 세 가지를 이해했으니, 다음 섹션에서 프로세스를 종료하는 방법을 알아보세요.

프로세스 종료를 위해 kill 명령 사용하기

다음 예제에서는 kill 명령을 사용합니다. 잠시 PowerShell 인스턴스인 pwsh를 실행하고 할당된 PID가 22687이라고 가정해 보겠습니다. 이 프로세스를 종료하는 한 가지 방법은 아래에 표시된 대로 진행합니다.

  1. kill 명령에서 사용되는 pwsh 프로세스의 PID를 확인하기 위해 pgrep pwsh를 사용합니다.
  2. kill -s TERM 22687 명령을 사용하여 pwsh 프로세스를 정상적으로 종료하세요. TERM 명령은 15(SIGTERM) 신호에 해당하며, kill 명령의 s 매개변수를 사용하여 지정합니다.
  3. top, ps, 또는 pgrep 중 선택하여 PID가 더 이상 나열되지 않는지 확인하세요.

아래는 Ubuntu 20.04 LTS bash 터미널에서 위 과정의 예시입니다.

Using kill and associated commands to terminate the pwsh process.

killall 명령은 PID가 아닌 이름을 기반으로 모든 프로세스를 종료합니다. 이 명령은 부주의하게 사용할 경우 매우 파괴적일 수 있으므로 사용하는 경우 i 옵션을 사용하여 명령이 확인을 요청하도록 하세요.

pkill을 사용하여 이름으로 프로세스 종료하기

kill 명령은 프로세스 ID만 작동한다는 점에 주목할 수 있습니다. 이로 인해 프로세스를 종료하는 것은 복잡한 다단계 과정이 될 수 있습니다. procps 및 procps-ng 패키지에 포함된 pkill 명령은 검색된 이름을 기반으로 프로세스를 종료합니다.

pkill 명령은 기능적으로 pgrep 프로그램을 래퍼로 사용합니다. pkill 명령은 터미널에 PID만 나열하는 대신에 각 프로세스에 지정된 신호를 보냅니다. pkillkill과 다르게 프로세스의 이름만 사용할 수 있습니다.

pkill 명령은 Ubuntu 20.04 LTS에서는 기본적으로 사용할 수 없습니다. 애플리케이션을 다운로드하고 설치해야 합니다. 다음 명령을 실행하여 설치하세요: sudo apt install mcollective-plugins-process -y.

pkill을 사용하여 프로세스를 종료하려면 다음 단계를 수행하세요:

  1. ps를 사용하여 nano 애플리케이션(명령줄 텍스트 편집기)이 현재 실행 중인지 확인합니다. 이 단계는 옵션입니다. 프로세스를 종료하기 전에 안전을 확인하기 위한 절차입니다.
  2. pkill -9 nano를 사용하여 강제로 nano 애플리케이션을 종료합니다.

아래는 Ubuntu 20.04 LTS bash 터미널에서 위의 과정의 예시입니다.

Using the pkill command to forcefully terminate the nano process.

top 명령을 사용하여 실행 중인 프로세스를 확인하고 특정 프로세스를 종료할 수 있습니다.

k 키를 눌러 주어진 프로세스를 종료할 수 있는 대화형 프롬프트가 표시됩니다.

아래의 예시에서 top 명령을 실행하고 k를 누릅니다. 종료하려는 PID를 입력하고 Enter 키를 눌러 PID를 즉시 종료합니다.

Use top to specify a process to terminate using the k keystroke.

다음으로 PowerShell의 Stop-Process 명령을 사용하는 Linux 명령어의 또 다른 대안을 배워보세요!

PowerShell의 Stop-Process 명령을 사용하여 프로세스를 종료하는 방법

리눅스 기본 명령어가 마음에 들지 않는다면, PowerShell을 사용해보세요! kill 명령어와 마찬가지로, Stop-Process cmdlet을 사용하여 프로세스를 종료할 수 있습니다. 다시 말해, PowerShell pwsh 프로세스를 실행하고 있다고 가정해보세요.

  1. Get-Process -ProcessName 'pwsh'를 사용하여 PID를 찾고 종료할 PID를 확인하세요.
  2. Stop-Process -Id 29992,30014를 사용하여 반환된 여러 프로세스를 종료하세요.
  3. Get-Process -ProcessName 'pwsh'를 사용하여 PID인 2999230014가 더 이상 나열되지 않는지 확인하세요. 이는 해당 프로세스들이 종료되었음을 의미합니다.

Get-Processkill 메서드를 사용하여 하나 또는 여러 프로세스를 종료할 수도 있습니다: (Get-Process -Id [PID]).Kill() 또는 (Get-Process -Id [PID1,2,3,4]).Kill().

ProcessName 매개변수를 사용할 때 주의하세요. 이 매개변수를 사용하면 killall 명령과 유사하게 동작하며, 지정된 이름과 일치하는 모든 프로세스를 종료합니다.

아래는 Ubuntu 20.04 LTS bash 터미널에서 위의 프로세스 예시입니다.

Using PowerShell, Stop-Process to kill processes in Linux.

다음 단계

이제 Linux에서 프로세스를 찾고 종료하는 다양한 방법을 알게 되었어야 합니다! 다음 도전에서는 SSH 연결을 통해 원격으로 프로세스를 종료하거나 컨테이너에서 실행 중인 프로세스를 종료하는 방법을 시도해보세요.

관련: 리눅스 세계에서의 윈도우즈 사용자: 리눅스에서 SSH 설정하기

Source:
https://adamtheautomator.com/linux-kill-process/