Linux

Linux基礎プロセスをkillしたりジョブをbgしたりfgする

killは指定したプロセスを終了させるコマンドです。killシグナルによる終わらせ方の違いと、実行中のジョブをbg・fgでバックグラウンドとフォアグラウンドに切り替える方法をまとめます。

killとは穏やかではありませんが、今回killするのはプロセスさんです。
プロセスさんはkillされ慣れてるのでさほど心配する必要はありませんよ。

サイコパスみたいな文章となりましたが、killコマンドとジョブをフォアグラウンドで実行したりバックグラウンドで実行する方法をEnvaderさんで学んでいきます。

前回のあらすじ

前回学んだプロセスのお話の続きとなります。

psコマンドの見方まとめ|各列の意味とps -efとの違い
Linuxコマンドを基礎から学んでる猫だくさんです。普段なんとなーく使っているLinuxコマンドについて復習しています。各コマンドを復習していく中で意味を理解していないものが多く、これらのコマンドは一体どうやって覚えたんだろうという疑問がわ

killコマンドとはなんぞや?

プロセスにシグナルを送るコマンドです。プロセスを強制終了させるのはオプション機能の一つに過ぎません。

killコマンドによるプロセス管理

とはいえまずは主な使い方であるプロセスを強制終了させる使い方をやってみます。
環境はEnvaderを利用しています。

  1. まずはpsコマンドでプロセスのIDをps auxで確認します。
  2. 狙いを定めて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コマンドでプロセスの終了することを学びました
  • ジョブを中断して邪魔にならないようバックグラウンドで実行する方法などを学びました。

これでプロセスやジョブの生殺与奪の権を握ったといえます。
冨岡先輩ブチギレ案件です。

参考資料

コース一覧 | エンベーダー
コース一覧に関するページです。Linuxを学べるLinux基礎・応用コースを始めとして、エンジニア必須の知識であるデータベースやセキュリティのコースもあります。
プロセスを終了するkillコマンドの使い方まとめ!【Linuxコマンド集】
killは実行しているプロセスを終了するコマンドだ。普通ではない動作をしているジョブやプロセスを終了する。他にも正規表現検索などでコンピュータに負荷をかけている動作を止める時などに使用する。
Linuxの「ジョブコントロール」をマスターしよう
前回は、シェルがコマンドを実行する際の単位である「ジョブ」について、X環境を使って動作を確かめました。今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です。