killとは穏やかではありませんが、今回killするのはプロセスさんです。
プロセスさんはkillされ慣れてるのでさほど心配する必要はありませんよ。
サイコパスみたいな文章となりましたが、killコマンドとジョブをフォアグラウンドで実行したりバックグラウンドで実行する方法をEnvaderさんで学んでいきます。
前回のあらすじ
前回学んだプロセスのお話の続きとなります。

killコマンドとはなんぞや?
プロセスにシグナルを送るコマンドです。プロセスを強制終了させるのはオプション機能の一つに過ぎません。
killコマンドによるプロセス管理
とはいえまずは主な使い方であるプロセスを強制終了させる使い方をやってみます。
環境はEnvaderを利用しています。
- まずはpsコマンドでプロセスのIDを
ps auxで確認します。 - 狙いを定めてkillなのですが、シグナル番号も必要です。とりあえず強制終了するとして
-9を指定しましょう
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 17944 2700 ? Ss 13:25 0:00 /bin/bash /init.sh
root 12 0.0 0.0 69956 3060 ? Ss 13:25 0:00 /usr/sbin/sshd
envader 13 0.0 0.0 702216 1084 ? Sl 13:25 0:00 /tmp/malware
kill -9 13
引用:プロセス管理 ー 2
malwareってなんだよ!そりゃとりあえずkillするよ!
killシグナル
killで送れるシグナル一覧を見るにはkill -lです。
kill -l
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
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
めちゃくちゃありますね。覚えられないので以下くらいをチェックしときましょう。
| Signal Name | No | mean |
|---|---|---|
| HUP | 1 | ハングアップ、設定の再読み込み |
| INT | 2 | 割り込み、一時停止 |
| KILL | 9 | 強制終了 |
| TERM | 15 | 終了 |
| TSTP | 19 | サスペンド(スタンバイ) |
※KILLシグナル(9)でDBやLDAPサーバープロセスを強制終了するとデータ破損する可能性。
とりあえずkillコマンドとシグナルについてはこんな感じです。
ジョブの実行場所切り替え
おもむろにコマンドを実行したところ結構時間のかかる処理で後続のコマンド打てなくなったことって無いですか?
私はしょっちゅうあります。
そんなときにジョブを一時停止してバックグラウンドで実行するといったことができます。
ジョブってのは
プログラムの実行単位のことです。
ターミナルでコマンド実行したときはフォアグラウンドジョブになります。
一方でユーザー操作とは関係なく背後で実行することをバックグラウンドジョブといいます。
バックグラウンドでジョブを実行するには、コマンドの後に&をつけます。
フォアグラウンド・バックグラウンドの切り替え
まずは実行中のジョブをjobsコマンドで表示します。
フォアグラウンドで実行しているジョブをバックグラウンドにするには
bg %ジョブID
バックグラウンドで実行しているジョブをフォアグラウンドにするには
fg %ジョブID
※実行中ジョブを一時停止するにはctrl+z
つまりうっかりフォアグラウンドで実行したジョブを一旦停止しbgでバックグラウンド実行に切り替えることができます。
【2026-08-15 追記】上のシグナル表に間違いがあります
ここから下は2026年8月のterralienが後から足した追記です。当時の本文は直していません。2022年に自分で書いた表を読み返したら2箇所まちがっていて、しかもまちがいの答えは同じ記事の中のkill -lの出力に載っていました。せっかく貼った出力を自分で読んでいなかったわけです。
訂正1: TSTPは19ではなく20
本文の表は「TSTP / 19 / サスペンド(スタンバイ)」としていますが、19番はSIGSTOP、20番がSIGTSTPです。上に貼ったkill -lの出力にも19) SIGSTOP 20) SIGTSTPと出ています。
| No | Signal | 何が起きるか | 止められるか |
|---|---|---|---|
| 19 | SIGSTOP | プロセスを一時停止する | 捕捉も無視もできない |
| 20 | SIGTSTP | 端末からの一時停止(Ctrl+Zがこれ) |
プログラム側で捕捉できる |
| 18 | SIGCONT | 止めたプロセスを再開する | — |
実務で効くのは右の列です。SIGSTOP(19)とSIGKILL(9)だけはプログラム側で捕まえられません。だから「行儀よく終わってほしい」ときはSIGTERM(15)、「何をしてでも止めたい」ときだけSIGKILL(9)という使い分けになります。本文が最初にkill -9を使っているのは、malwareという名前のプロセスが相手だったからで、ふだんのプロセスに対して最初から-9を撃つのは行儀が悪いです。まずは無指定(=SIGTERM)で試してください。
なお番号はアーキテクチャによって変わります。上の表はx86/x86_64のLinuxの値です。番号ではなくkill -TSTPのように名前で指定しておけば、この心配自体が要りません。
訂正2: INT(2)は「一時停止」ではありません
本文の表は「INT / 2 / 割り込み、一時停止」としていますが、SIGINTは終了させるシグナルです。Ctrl+Cがこれで、既定の動作はプロセスの終了。止まって後で再開できるCtrl+Z(SIGTSTP)と混同していました。
Ctrl+Cで消えたプロセスは戻ってきません。 jobsに残っていてfgで戻せるのはCtrl+Z(SIGTSTP)で止めたほうだけです。ここを取り違えると、長時間かかる処理を「一時停止したつもりで殺す」ことになります。
ついでに: bgは「実行中のジョブ」には効きません
本文は「フォアグラウンドで実行しているジョブをバックグラウンドにするにはbg %ジョブID」と書いていますが、フォアグラウンドで動いている最中はそもそもプロンプトが返ってこないのでbgを打てません。順番は必ずこうなります。
Ctrl+Z # まず止める(SIGTSTP)→ プロンプトが返る
jobs # [1]+ Stopped ./slow.sh
bg %1 # 止めたジョブを、バックグラウンドで再開する(SIGCONT)
fg %1 # 手元に戻す
つまりbgは「フォアグラウンド→バックグラウンドに移すコマンド」ではなく、止まっているジョブを背後で再開するコマンドです。本文もこのすぐ後でCtrl+Zに触れているので、手順としては合っていました。説明の順番が逆だっただけです。
【2026-08-15 追記ぶんの出典】signal(7) - Linux manual page(シグナル番号と、SIGKILL・SIGSTOPが捕捉・無視できないこと)/bash(1) - Linux manual page(JOB CONTROL の節。Ctrl+Z・bg・fgとSIGCONTの関係)
学んだこと
- killコマンドでプロセスの終了することを学びました
- ジョブを中断して邪魔にならないようバックグラウンドで実行する方法などを学びました。
これでプロセスやジョブの生殺与奪の権を握ったといえます。
冨岡先輩ブチギレ案件です。
参考資料


