Linuxのプロセス管理は、初めてのシステム管理者(sysadmin)には困難に見えるかもしれません。しかし、少しの説明とデモンストレーションを通じて、Linuxのプロセスを検索し実行する方法は、ps
やkill
などのコマンドラインツールを使用するだけのことです。
この記事では、実行中および異常なプロセスを検索し、実行中のプロセスを終了させるためのコマンド、バックグラウンドプロセスの検索など、Linuxオペレーティングシステムのどのバージョンでも使用できるプロセス管理コマンドについて学ぶことができます。
この記事の最後まで読むと、Linuxのプロセス管理をコマンドラインからプロセス識別番号(PID)に基づいて行えるようになります。プロセス管理コマンドについてすべて学ぶために、読み続けましょう!
前提条件
この記事では、Linuxでプロセスを管理する方法について詳しく説明します。実際に手を動かして試す場合、以下が必要です。
- A Linux host, which can be a virtual machine or a physical machine.
- PowerShellの例を試すには、Linuxホストに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.
使用するLinuxのディストリビューションはお好みで選んでください。この記事はUbuntu 20.04 LTSをベースにしていますが、コマンドはLinuxオペレーティングシステムに共通しています。
では、始めましょう。
Linuxでのプロセス管理
たまに、Linuxシステム上で実行中のプロセスを停止する必要がある場合があります。例えば、スケジュールで実行されるbashスクリプトがあるかもしれません。そのbashスクリプトは、別のユーザーとして設定されたcronジョブ(Linuxプロセススケジューラ)として実行されます。
このスクリプトは時々、スクリプト自体が失敗する可能性のある誤ったプロセスを生成します。システムを再起動したり、スクリプトを停止したりせずに、どのようにしてそれらの誤ったプロセスを終了させることができるでしょうか?
次のセクションでは、Linuxシステム上でプロセスを検出し、終了またはキルするために使用されるコマンドについて説明します。各セクションは前のセクションに基づいて構築されます。Linuxに固有のps
、top
、pgrep
、kill
、およびpkill
コマンドについて学びます。
ボーナスとして、PowerShellの同等のコマンドGet-Process
とStop-Process
も含まれています。Linuxのネイティブコマンドが好みでない場合に使用できます。
プロセスの検出ツール
プロセスを終了させる前に、正確な対象プロセスを特定する必要があります。一意のPIDを使用して正確に対象を特定できます。終了するための正しいプロセスを特定する方法について学びましょう。
ps
コマンドを使用してプロセス情報を表示する
プロセスの状態またはps
コマンドは、Linuxシステム上のアクティブなプロセスに関連する情報を表示します。ps
を使用して実行中のプロセスやバックグラウンドプロセスを見つけることができます。
ps
コマンドは、デフォルトで現在のユーザーの有効なユーザー識別子(EUID)に関連するすべてのプロセスを表示します。以下に示すように、ps
コマンドを実行すると、ユーザーが終了できるすべての実行中のプロセスが返されます。

bkindle
.top
コマンドを使用して拡張プロセス情報を検索する方法
実行中のプロセスとシステムメトリックの定期的に更新される情報を見つけたい場合は、top
コマンドを使用することができます。 ps
とは異なり、top
コマンドは一定の間隔で画面上のプロセス情報を更新します。
top
コマンドを実行すると、PIDだけでなく、プロセスの詳細にはCPU使用率、メモリ使用率、Nice値(CPUスケジューリングプロセスの優先度)、Linuxカーネルによって設定されたプロセスの優先度(PR)も含まれます。
新人または経験豊富なシステム管理者にとって、top
コマンドはシステムリソースとプロセスの管理における主要なツールです。以下に示すように、top
コマンドの出力には、ps
コマンドよりも詳細なプロセス情報や全体的なシステムメトリックが表示されます。

top
command on Ubuntu Desktop 20.04 LTS showing all running PID’s.htop
は、カラー表示されるターミナル出力などの様々な改善点を含んだ、top
の強化版です。
例えば、プロセスが消費しているメモリやCPUリソースを調査したい場合、以下のようにtop
のp
スイッチを使用することができます。

特定のユーザーの実行中のすべてのプロセスを表示する必要があるかもしれません。top
コマンドには、u
スイッチがあり、特定のユーザーのプロセスのみを表示することができます。以下の例では、ユーザーIDがbkindle
に一致するPIDが表示されています。

top
command displaying only processes for the user bkindle
.pgrep
コマンドを使用して特定のプロセスのPIDを検索する
pgrep
はもともとSolarisのコマンドでしたが、Linuxで使用するために移植されました。grep
コマンドの検索力とps
のプロセス管理を組み合わせることで、pgrep
は対象のプロセスを正確に見つける柔軟性を提供します。
ps
はより詳細な情報を表示しますが、pgrep
は返されたプロセスのPIDのみを返すように設計されています。pgrep
は多くの利用可能な検索パラメータを使用してプロセスを特定するのに役立ちます。次の例では、pgrep
がvmtoolsd
に一致するプロセスを検索している様子が示されています。

pgrep
to obtain all PIDs associated with vmtoolsd
.同様に、u
スイッチを使用して特定のユーザーに関連するプロセスのみを取得するためのユーザーIDを指定します。以下のように、ユーザーbkindle
とvmtoolsd
プロセスに対しては、単一のPIDのみが返されます。

vmtoolsd
process associated with the user bkindle
.PowerShellのGet-Process
を使用してLinuxでプロセスを検索する
典型的なLinuxコマンドは非常に優れていますが、PowerShellはLinuxのプロセスも管理できることをご存知でしょうか? Get-Process
コマンドレットはLinuxのps
コマンドと似たような働きをし、プロセス情報を返します。例えば、現在のユーザーbkindle
によって実行されているすべてのプロセスを検索する必要があるかもしれません。以下のように、ユーザーbkindle
のすべてのPID(Get-Process
でIDと表示される)を検索します。

Get-Process
cmdlet.関連記事:PowerShell Where-Objectを使用してすべてのものをフィルタリングする方法
さまざまなプロセスを見つける方法を学んだので、次はLinuxでプロセスを終了または削除する方法をすべて紹介します!
LinuxでのKillコマンドを使用してプロセスを終了する
前のセクションでは、ネイティブのLinuxおよびPowerShellコマンドを使用して、キルシグナルを送信するプロセスのPIDを特定する方法を学びました。次のセクションでは、kill
およびpkill
プログラム、それに関連するシグナル、およびコマンドラインスイッチの使用方法を説明します。
Linuxのシグナルとプロセス管理
シグナルは、Linuxがオペレーティングシステム内で実行されているプロセスとの通信に使用する方法です。 kill
コマンドがプロセスを終了するために使用する3つの主要なシグナルは次のとおりです:
- 1(SIGHUP)- インタラクティブなプログラムを終了し、デーモン(バックグラウンドサービス)が使用する設定ファイルを再読み込みします。
- 9(SIGKILL)- プロセスを優雅なシャットダウンのタスクを実行せずに終了させます。
- 15(SIGTERM)- プロセスを優雅に終了させるために、完了時に開いているファイルを閉じるなどの処理を行います。これは、killコマンドを使用する際に番号が指定されていない場合にデフォルトで使用されるシグナルです。
この記事では、プロセスを終了するために使用される3つの主要なシグナルに焦点を当てていますが、合計64の利用可能なシグナルがあります。シグナルとそれに対応する番号のリストを取得するには、
kill -l
を使用します。
プロセスを終了するために使用される3つの主要なシグナルを理解したので、次のセクションでプロセスを終了する方法を学びましょう。
kill
コマンドを使用してプロセスを終了する
次の例では、kill
コマンドを使用します。一時的にpwsh
という名前のPowerShellインスタンスを実行しており、割り当てられたPIDは22687です。このプロセスを終了する方法の一つを以下に示します。
kill
コマンドで使用するpwsh
プロセスのPIDを特定するためにpgrep pwsh
を使用します。kill -s TERM 22687
を使用して、pwsh
プロセスを正常に終了させます。TERM
コマンドは15(SIGTERM)シグナルにマップされ、kill
コマンドのs
パラメーターで指定されます。top
、ps
、またはpgrep
のいずれかを使用して、PIDがもはやリストされていないことを確認します。
以下に、Ubuntu 20.04 LTSのbashターミナルから上記のプロセスの例を示します。

kill
and associated commands to terminate the pwsh
process.
killall
コマンドは、PIDではなく名前に基づいてすべてのプロセスを終了します。このコマンドは注意して使用しないと非常に破壊的ですが、このコマンドを使用する場合は、i
オプションを使用して確認を求めるようにします。
pkill
を使用して名前でプロセスを終了する
kill
コマンドはプロセスIDのみで動作することに気づいたかもしれません。これにより、プロセスの終了が複雑な多段階のプロセスになる可能性があります。パッケージに含まれているprocpsおよびprocps-ngのpkill
コマンドは、検索された名前に基づいてプロセスを終了します。
機能的には、pkill
コマンドはpgrep
プログラムのラッパーとして動作します。pkill
コマンドは、指定された信号を見つけたプロセスごとに送信し、端末にPIDをリスト表示するだけでなく、pkill
はkill
と異なり、プロセスの名前のみを使用でき、PIDは使用できません。
Ubuntu 20.04 LTSでは、デフォルトで
pkill
コマンドは利用できません。アプリケーションをダウンロードしてインストールする必要があります。そのためには、sudo apt install mcollective-plugins-process -y
を実行します。
pkill
を使用してプロセスを終了するには、以下の手順を実行します:
ps
を使用して、nanoアプリケーション(コマンドラインテキストエディタ)が現在実行中であることを確認します。このステップはオプションですが、プロセスを終了する前の安全チェックです。pkill -9 nano
を使用して、nanoアプリケーションを強制的に終了します。
以下に、Ubuntu 20.04 LTSのbashターミナルから上記のプロセスの例を示します。

pkill
command to forcefully terminate the nano process.Top
コマンドでプロセスを終了する
実行中のプロセスを表示するためにtop
コマンドを実行すると、kキーを押すことで指定したプロセスを終了することができます。プロセスを終了するPIDを求めるインタラクティブなプロンプトが表示されます。
下に示すように、top
コマンドを実行し、kを押します。終了させたいPIDを入力し、Enterキーを押すと、PIDが即座に終了します。

top
to specify a process to terminate using the k keystroke.次に、PowerShellのStop-Process
コマンドを使用した、ネイティブなLinuxコマンドのもう一つの代替手段を学びましょう!
PowerShellのStop-Process
コマンドを使用してプロセスを終了する
Linuxのネイティブコマンドがお好みでない場合、PowerShellを使用することもできます!kill
コマンドと同様に、Linuxで Stop-Process
コマンドレットを使用してプロセスを終了することができます。再度、PowerShellのpwsh
プロセスを実行していると仮定します。
Get-Process -ProcessName 'pwsh'
と入力してPIDを見つけ、終了するためのPIDをメモしてください。Stop-Process -Id 29992,30014
を使用して複数のプロセスを終了します。Get-Process -ProcessName 'pwsh'
を使用してPIDを確認し、29992
と30014
が一覧に表示されなくなっていることを確認してください。これは、それらが終了されたことを意味します。
また、
Get-Process
とkill
メソッドを使用して、1つまたは複数のプロセスを終了することもできます:(Get-Process -Id [PID]).Kill()
または(Get-Process -Id [PID1,2,3,4]).Kill()
。
ProcessName
パラメータを使用する場合は注意してください。このパラメータを使用すると、killall
コマンドと同様に、指定された名前に一致するすべてのプロセスが終了します。
以下は、Ubuntu 20.04 LTSのbashターミナルで上記のプロセスの例です。

Stop-Process
to kill processes in Linux.次の手順
あなたはLinuxでプロセスを見つけて終了するための多くの方法を知っているはずです!次の挑戦として、SSH接続を使用してプロセスをリモートで終了させるか、コンテナで実行されている可能性のあるプロセスを終了させてみてください。