
LinuC入門|Linuxでプロセスとジョブを停止する方法
プロセスを正しく見分け、適切なシグナルで安全に停止する。Linuxの実行管理を基礎から身につけよう。
Linuxを操作していると、実行したコマンドがなかなか終了しなかったり、バックグラウンドで動かしている処理を途中で止めたくなったりすることがあります。
このようなときに使用するのがkillコマンドです。
killという名前から、プロセスを強制的に終了させるだけのコマンドに見えるかもしれません。しかし、killの本来の役割は、指定したプロセスやジョブへシグナルを送信することです。
シグナルとは、実行中のプロセスに対して、終了、一時停止、割り込み、設定の再読み込みなどを伝えるための通知です。どのシグナルを送るかによって、プロセスに指示する内容が変わります。
たとえば、通常の終了を促すときはTERMシグナルを使用します。それでも終了できない場合は、KILLシグナルによる強制終了を検討します。ただし、KILLシグナルではプロセスが終了前の処理を行えないため、最初から使用するのはおすすめできません。
この記事ではAlmaLinux 10.2を使用し、一般ユーザーsuzukiとrootユーザーによる操作例を見ながら、プロセスとジョブを安全に停止する方法を詳しく解説します。
プロセスとジョブの違い
プロセスとジョブは似ていますが、管理している範囲が異なります。
| 用語 | 説明 |
|---|---|
| プロセス | Linux上で実行されているプログラムの単位 |
| PID | Linuxが各プロセスへ割り当てる識別番号 |
| ジョブ | シェルが管理しているコマンドの実行単位 |
| ジョブ番号 | シェルがジョブへ割り当てる番号 |
| シグナル | プロセスへ終了や停止などを伝える通知 |
プロセスはLinuxシステムによって管理され、各プロセスにはPIDが割り当てられます。PIDはプロセスIDを意味し、実行中のプロセスを識別するために使用します。
一方、ジョブは現在操作しているシェルによって管理されます。コマンドをバックグラウンドで実行すると、ジョブ番号とPIDが表示されます。
suzuki@AlmaLinux:~$ sleep 300 &
[1] 6214この表示では、次のように読み取ります。
- 1はジョブ番号
- 6214はPID
- &はコマンドをバックグラウンドで実行する指定
ジョブ番号をkillコマンドで指定するときは、%1のように番号の前へ%を付けます。
sleepコマンドの書式
sleep 時間sleepコマンドは、指定した時間だけ処理を待機するコマンドです。この記事では、動作確認用のプロセスを一定時間実行しておくために使用します。
suzuki@AlmaLinux:~$ sleep 300この例では、sleepプロセスが300秒間待機します。
sleepコマンドのオプション
この記事の使用例では、sleepコマンドにオプションを指定しません。300などの数値はオプションではなく、待機時間を表す引数です。
| 指定 | 説明 |
|---|---|
| 時間 | 待機する時間を指定する。単位を省略した場合は秒として扱われる |
図1:プロセス・ジョブ・シグナルの関係

この図から分かること
実行したコマンドはプロセスとしてLinuxに管理され、PIDが割り当てられます。バックグラウンドで実行したコマンドは、同時にシェルのジョブとしても管理されます。
そのため、killコマンドでは、PIDを使ってプロセスを指定する方法と、%を付けたジョブ番号でジョブを指定する方法があります。
killコマンドとは
killコマンドは、指定したプロセスまたはジョブへシグナルを送信するコマンドです。
シグナルを指定しなかった場合は、既定でTERMシグナルが送信されます。TERMはプロセスに通常の終了を促すシグナルです。
killコマンドの書式
kill [オプション] PID
kill [オプション] %ジョブ番号複数のPIDを指定する場合は、空白で区切って並べます。
killコマンドの主なオプション
| オプション | 説明 |
|---|---|
| -s シグナル | 送信するシグナルを名前または番号で指定する |
| -9 | KILLシグナルを送信し、プロセスを強制終了する |
-sでは、次のようにシグナル名を指定できます。
kill -s TERM 6214番号を使用する場合は、次のように指定できます。
kill -s 15 6214どちらもPID 6214へTERMシグナルを送る指定です。
killコマンドの引数
| 引数 | 説明 |
|---|---|
| PID | シグナルを送信するプロセスのPIDを指定する |
| %ジョブ番号 | シグナルを送信するジョブの番号を指定する |
PIDを指定する場合は6214のように番号だけを記述します。ジョブ番号を指定する場合は%1のように%を付けます。
Linuxでよく使用するシグナル
AlmaLinux 10.2の一般的なx86_64環境では、次のシグナルをよく使用します。
| 番号 | 短い名前 | 正式な名前 | 主な役割 |
|---|---|---|---|
| 1 | HUP | SIGHUP | 対応しているプログラムに設定の再読み込みなどを指示する |
| 2 | INT | SIGINT | 実行中の処理へ割り込みを指示する |
| 9 | KILL | SIGKILL | プロセスを強制終了する |
| 15 | TERM | SIGTERM | プロセスに通常の終了を促す |
| 20 | TSTP | SIGTSTP | 端末からプロセスの一時停止を指示する |
TERMとSIGTERMは別のシグナルではありません。SIGはシグナル名であることを示す接頭辞であり、killコマンドではSIGを省略してTERMと指定できます。
同じように、KILLとSIGKILL、INTとSIGINT、TSTPとSIGTSTPも、それぞれ同じシグナルを表しています。
ただし、HUPを受け取ったときに設定を再読み込みするかどうかは、プログラムによって異なります。すべてのプロセスがHUPによる設定再読み込みに対応しているわけではありません。
PIDを調べてプロセスを停止する
バックグラウンドで実行したsleepプロセスを、PIDを指定して停止してみましょう。
まず、sleepコマンドを300秒間実行します。
suzuki@AlmaLinux:~$ sleep 300 &
[1] 6214psコマンドとgrepコマンドを組み合わせて、sleepプロセスを確認します。
suzuki@AlmaLinux:~$ ps ax | grep sleep
6214 pts/0 S 0:00 sleep 300
6218 pts/0 S+ 0:00 grep sleepPID 6214が停止対象となるsleepプロセスです。
jobsコマンドでも確認してみましょう。
suzuki@AlmaLinux:~$ jobs
[1]+ 実行中 sleep 300 &PID 6214へ既定のTERMシグナルを送ります。
suzuki@AlmaLinux:~$ kill 6214シグナルを省略しているため、この操作ではTERMシグナルが送られます。
ジョブの終了通知が表示されます。
[1]+ Terminated sleep 300もう一度プロセスを確認します。
suzuki@AlmaLinux:~$ ps ax | grep sleep
6225 pts/0 S+ 0:00 grep sleepsleepプロセスは表示されず、検索に使用したgrepプロセスだけが表示されています。
jobsコマンドでも確認します。
suzuki@AlmaLinux:~$ jobs
suzuki@AlmaLinux:~$何も表示されなければ、現在のシェルが管理しているジョブは残っていません。
psコマンドとは
psコマンドは、Linux上で動作しているプロセスの情報を表示するコマンドです。
psコマンドの書式
ps [オプション]この記事では、次の形式を使用します。
ps axpsコマンドの主なオプション
| オプション | 説明 |
|---|---|
| a | 端末に関連付けられたほかのユーザーのプロセスも表示対象にする |
| x | 端末に関連付けられていないプロセスも表示対象にする |
psでは、オプションの指定形式が複数あります。この記事で使用するaxは、ハイフンを付けないBSD形式の指定です。
grepコマンドとは
grepコマンドは、入力された文字列の中から、指定したパターンに一致する行を検索するコマンドです。
grepコマンドの書式
grep [オプション] 検索文字列この記事では、ps axの出力からsleepを含む行だけを取り出します。
ps ax | grep sleep|は、左側のコマンドの出力を右側のコマンドへ渡すための記号です。
grepコマンドのオプション
この記事のgrepコマンドでは、オプションを指定しません。
| 指定 | 説明 |
|---|---|
| sleep | sleepという文字列を含む行を検索する |
grep自身の実行行にもsleepという文字列が含まれるため、検索結果にはgrep sleepも表示されます。停止するPIDを選ぶときは、grep自身のPIDを間違えて指定しないようにしましょう。
jobsコマンドとは
jobsコマンドは、現在のシェルが管理しているジョブの状態を表示するコマンドです。
jobsコマンドの書式
jobs [ジョブ番号]この記事では、引数やオプションを付けずに実行します。
suzuki@AlmaLinux:~$ jobsjobsコマンドのオプション
この記事のjobsコマンドでは、オプションを指定しません。
| 指定 | 説明 |
|---|---|
| オプションなし | 現在のシェルが管理しているジョブを表示する |
jobsが表示するのは、現在操作しているシェルのジョブです。別のターミナルで実行されたプロセスや、別のユーザーが実行したプロセスは表示されません。
ジョブ番号を指定して停止する
killコマンドでは、PIDだけでなくジョブ番号も指定できます。
新しいsleepプロセスをバックグラウンドで実行します。
suzuki@AlmaLinux:~$ sleep 600 &
[2] 6250ジョブの状態を確認します。
suzuki@AlmaLinux:~$ jobs
[2]+ 実行中 sleep 600 &ジョブ番号2へTERMシグナルを送ります。
suzuki@AlmaLinux:~$ kill -s TERM %2終了通知が表示されます。
[2]+ Terminated sleep 600%2はPID 2ではなく、現在のシェルが管理しているジョブ番号2を表します。
ジョブ番号はシェルごとに管理されます。そのため、別のターミナルを開いてkill -s TERM %2を実行しても、元のターミナルのジョブ番号2を操作することはできません。
TERMシグナルで通常終了を促す
kill、killall、pkillでは、シグナルを省略すると既定でTERMシグナルが送られます。
次の2つのkillコマンドは、同じ意味になります。
kill 6250
kill -s TERM 6250TERMシグナルを受信したプロセスは、プログラム側に終了処理が用意されていれば、次のような作業を行ってから終了できます。
- 使用しているファイルを閉じる
- 処理中のデータを書き出す
- 一時ファイルを削除する
- 終了状態を記録する
- 関連する処理を停止する
ただし、TERMシグナルは通常終了の要求です。プロセスがTERMを受け取ったからといって、必ず正常終了するとは限りません。
プロセスがTERMを無視するように作られていたり、処理が応答しない状態になっていたりすると、終了しないことがあります。
KILLシグナルで強制終了する
TERMシグナルを送っても終了しない場合は、KILLシグナルによる強制終了を検討します。
suzuki@AlmaLinux:~$ kill -9 6250ジョブ番号を指定する場合は、次のように実行します。
suzuki@AlmaLinux:~$ kill -9 %2KILLシグナルはプロセス側で捕捉、拒否、無視できません。そのため、プロセスは終了前の後片付けを行えません。
強制終了すると、次のような問題が発生する可能性があります。
- 書き込み途中のファイルが不完全な状態で残る
- 一時ファイルが削除されずに残る
- 処理中のデータが失われる
- ファイルやデータの状態に不整合が生じる
- 障害原因を示すログが十分に記録されない
そのため、基本的には次の順序で操作します。
- psなどで停止対象を確認する
- killでTERMシグナルを送る
- プロセスが終了したか確認する
- 終了しない場合に原因を確認する
- ほかに安全な方法がない場合のみKILLシグナルを使用する
図2:TERMとKILLによる停止方法の違い

この図から分かること
TERMはプロセスに終了を依頼するシグナルであり、プロセスが終了前の処理を行える可能性があります。
一方、KILLはプロセスを強制的に終了させます。処理中のデータやファイルを保護するためにも、最初はTERMを使用し、KILLは最後の手段として利用することが大切です。
Ctrl + Cで実行中の処理を中断する
端末上で動作し続けるコマンドを中断するときは、Ctrl + Cを使用できます。
Ctrl + Cを押すと、端末でフォアグラウンド実行されている処理へINTシグナルが送られます。
ここではrootユーザーに切り替え、tailコマンドでログファイルの末尾を表示し続けます。
suzuki@AlmaLinux:~$ su -
パスワード:
root@AlmaLinux:~#tail -fでログの監視を開始します。
root@AlmaLinux:~# tail -f /var/log/dnf.log
2026-08-12T15:42:18+0900 INFO --- logging initialized ---
2026-08-12T15:42:20+0900 INFO Last metadata expiration check completed.tail -fは新しい行が追加されるのを待ち続けるため、そのままではプロンプトに戻りません。
ここでCtrl + Cを押します。
^C
root@AlmaLinux:~#Ctrl + CによってtailへINTシグナルが送られ、処理が終了します。
なお、Ctrl + Cはすべてのプロセスを無条件に終了させる操作ではありません。基本的には、その端末でフォアグラウンド実行されているプロセスグループへINTシグナルを送ります。
suコマンドとは
suコマンドは、現在のログインセッション内で別のユーザーへ切り替えるコマンドです。
suコマンドの書式
su [オプション] [ユーザー名]ユーザー名を省略した場合は、rootユーザーへの切り替えを試みます。
suコマンドの主なオプション
| オプション | 説明 |
|---|---|
| - | 切り替え先ユーザーとしてログインした場合と同様の環境を読み込む |
次のように実行すると、rootユーザーのログイン環境へ切り替わります。
suzuki@AlmaLinux:~$ su -
パスワード:
root@AlmaLinux:~#tailコマンドとは
tailコマンドは、ファイルの末尾部分を表示するコマンドです。ログファイルの直近の内容を確認するときによく使用します。
tailコマンドの書式
tail [オプション] ファイル名tailコマンドの主なオプション
| オプション | 説明 |
|---|---|
| -f | ファイルの末尾を表示した後、新しいデータが追加されると続けて表示する |
使用例は次のとおりです。
root@AlmaLinux:~# tail -f /var/log/dnf.log監視を終了するときはCtrl + Cを押します。
Ctrl + Zによる一時停止
Ctrl + Zを押すと、フォアグラウンドで実行されている処理へTSTPシグナルが送られます。
TSTPはプロセスを終了させるシグナルではありません。処理を一時停止させるシグナルです。
suzuki@AlmaLinux:~$ sleep 900
^Z
[3]+ 停止 sleep 900
suzuki@AlmaLinux:~$ジョブの状態を確認します。
suzuki@AlmaLinux:~$ jobs
[3]+ 停止 sleep 900この状態では、sleepプロセスは終了していません。停止状態のままシステム上に残っています。
不要なジョブであれば、ジョブ番号を指定してTERMシグナルを送ります。
suzuki@AlmaLinux:~$ kill -s TERM %3Ctrl + CとCtrl + Zの違いを整理すると、次のようになります。
| キー操作 | 送られるシグナル | 主な動作 |
|---|---|---|
| Ctrl + C | INT・2番 | 実行中の処理へ割り込みを指示する |
| Ctrl + Z | TSTP・20番 | 実行中の処理を一時停止する |
killallコマンドとは
killallコマンドは、指定した名前で実行されているプロセスへシグナルを送るコマンドです。
同じ名前のプロセスが複数存在する場合は、それらがまとめて対象になります。シグナルを省略した場合はTERMが送信されます。Linuxのkillallマニュアルでも、指定した名前で実行されているすべてのプロセスへシグナルを送る仕様が示されています。
killallコマンドの書式
killall [オプション] プロセス名killallコマンドの主なオプション
| オプション | 説明 |
|---|---|
| -s シグナル | 送信するシグナルを名前または番号で指定する。省略時はTERM |
killallコマンドの引数
| 引数 | 説明 |
|---|---|
| プロセス名 | シグナルを送るプロセスの名前を指定する |
killallで同名プロセスを停止する
sleepプロセスを2つバックグラウンドで実行します。
suzuki@AlmaLinux:~$ sleep 400 &
[4] 6311
suzuki@AlmaLinux:~$ sleep 500 &
[5] 6312pgrepコマンドでsleepという名前のプロセスを確認します。
suzuki@AlmaLinux:~$ pgrep -l sleep
6311 sleep
6312 sleepjobsコマンドでも確認します。
suzuki@AlmaLinux:~$ jobs
[4]- 実行中 sleep 400 &
[5]+ 実行中 sleep 500 &killallでsleepという名前のプロセスへTERMシグナルを送ります。
suzuki@AlmaLinux:~$ killall -s TERM sleep終了通知が表示されます。
[4]- Terminated sleep 400
[5]+ Terminated sleep 500もう一度pgrepを実行します。
suzuki@AlmaLinux:~$ pgrep -l sleep何も表示されなければ、sleepという名前のプロセスは見つかっていません。
jobsでも確認します。
suzuki@AlmaLinux:~$ jobs
suzuki@AlmaLinux:~$killallは、指定した名前に一致するプロセスをまとめて対象にします。停止してはいけない同名プロセスが存在しないか、実行前に確認することが大切です。
pgrepコマンドとは
pgrepコマンドは、指定した名前やキーワードに一致するプロセスを検索し、PIDを表示するコマンドです。
killallやpkillを実行する前にpgrepを使用すると、どのプロセスが対象になるのかを確認できます。
pgrepコマンドの書式
pgrep [オプション] キーワードpgrepコマンドの主なオプション
| オプション | 説明 |
|---|---|
| -l | PIDと一緒にプロセス名を表示する |
使用例は次のとおりです。
suzuki@AlmaLinux:~$ pgrep -l sleep
6311 sleep
6312 sleepPIDだけでなくプロセス名も表示されるため、停止対象を確認しやすくなります。
pkillコマンドとは
pkillコマンドは、指定したキーワードに一致するプロセスを検索し、シグナルを送るコマンドです。
killallは主にプロセス名を指定して使用しますが、pkillのキーワードは検索パターンとして扱われます。そのため、指定方法によっては複数のプロセスが一致します。
pkillコマンドの書式
pkill [オプション] キーワードpkillでシグナルを指定する方法
シグナルは次の形式で指定します。
pkill -シグナル キーワード
pkill -シグナル番号 キーワード主な指定方法は次のとおりです。
| オプション | 説明 |
|---|---|
| -TERM | TERMシグナルを送信する |
| -15 | 15番のTERMシグナルを送信する |
| -KILL | KILLシグナルを送信する |
| -9 | 9番のKILLシグナルを送信する |
pkillでシグナルを省略した場合も、既定ではTERMが送信されます。
注意したいのは、pkillの -s はシグナル指定ではないことです。AlmaLinuxで使用されるpkillでは、-sはセッションIDによって対象を絞り込むためのオプションです。シグナル指定としてpkill -s TERMのように実行してはいけません。pgrep・pkillのマニュアルでも、シグナルは-TERMのような形式、-sはセッション指定として定義されています。
pkillコマンドの引数
| 引数 | 説明 |
|---|---|
| キーワード | 検索対象となるプロセス名のパターンを指定する |
pkillでキーワードに一致するプロセスを停止する
sleepプロセスを2つバックグラウンドで実行します。
suzuki@AlmaLinux:~$ sleep 700 &
[6] 6361
suzuki@AlmaLinux:~$ sleep 800 &
[7] 6362最初にpgrepで対象を確認します。
suzuki@AlmaLinux:~$ pgrep -l sleep
6361 sleep
6362 sleeppkillでsleepに一致するプロセスへTERMシグナルを送ります。
suzuki@AlmaLinux:~$ pkill -TERM sleepシグナルを省略し、次のように実行しても既定のTERMが送信されます。
suzuki@AlmaLinux:~$ pkill sleep停止後の状態を確認します。
suzuki@AlmaLinux:~$ pgrep -l sleep何も表示されなければ、条件に一致するsleepプロセスは見つかっていません。
kill・killall・pkillの違い
3つのコマンドは、いずれもプロセスへシグナルを送信します。大きな違いは、停止対象の指定方法です。
| コマンド | 対象の指定方法 | 適している場面 | 注意点 |
|---|---|---|---|
| kill | PIDまたはジョブ番号 | 停止対象を個別に指定したい場合 | PIDやジョブ番号の指定間違いに注意する |
| killall | プロセス名 | 同じ名前のプロセスをまとめて停止したい場合 | 同名のプロセスが複数あると、すべて対象になる |
| pkill | キーワード | 名前のパターンに一致するプロセスを停止したい場合 | キーワードが広すぎると、意図しないプロセスも対象になる |
停止対象のPIDが分かっている場合は、killを使用する方法が分かりやすく、対象も限定しやすくなります。
killallやpkillは複数のプロセスをまとめて停止できるため便利ですが、実行前にpgrepで対象を確認することが大切です。
図3:kill・killall・pkillの使い分け

この図から分かること
killはPIDまたはジョブ番号を使って対象を指定します。停止させたいプロセスが明確な場合に適しています。
killallは同じ名前を持つプロセスをまとめて対象にし、pkillはキーワードに一致するプロセスを対象にします。killallとpkillは一度に複数のプロセスへ影響する可能性があるため、事前確認が特に重要です。
プロセスを停止するときの注意点
プロセスを停止するときは、次の点を意識すると安全に操作できます。
- 最初にpsやpgrepで停止対象を確認する
- PIDとプロセス名が正しいことを確認する
- 通常は既定のTERMシグナルから試す
- TERMを送った後は、プロセスが終了したか確認する
- KILLシグナルはTERMで終了できない場合の最終手段とする
- killallやpkillでは、複数のプロセスが対象になることを意識する
- Ctrl + CはINTによる割り込みであることを理解する
- Ctrl + Zは終了ではなく一時停止であることを理解する
- 一般ユーザーは、基本的に自分が所有するプロセスだけを停止できる
- rootで実行するときは、影響する範囲を慎重に確認する
特にrootユーザーでkillallやpkillを実行すると、一般ユーザーで実行する場合よりも広い範囲のプロセスへシグナルを送れる可能性があります。
名前やキーワードだけを見てすぐに実行せず、pgrep -lで対象を確認してから停止操作を行いましょう。
