Linuxのプロセス入門|バックグラウンド・フォアグラウンドの違いを初心者向けに解説

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)【Linux入門】初心者のための基礎知識・講座 > Linuxのプロセス入門|バックグラウンド・フォアグラウンドの違いを初心者向けに解説
「ターミナルでコマンドを実行したら画面が固まったように見えて、もう何も入力できなくなった。」
「"&" を付けると裏で動く、と聞いたけれど、何が起きているのかイメージできない。」

Linuxを使い始めたばかりの方が最初にぶつかる混乱のひとつが「プロセス」という概念です。Windowsでは画面の「×ボタン」でアプリを閉じるのが当たり前ですが、Linuxのターミナルにはそのようなボタンがありません。代わりに、今動いているプログラムを「プロセス」として捉え、必要に応じて裏へ回したり止めたりする発想が必要になります。

この記事では、Linuxのプロセスの考え方を、完全な初心者の方にもわかるように図解的に解説します。
フォアグラウンドとバックグラウンドの違い、プロセスの確認・終了の仕方まで、最初の一歩として必要な知識を順を追って押さえていきます。

実行環境: Ubuntu 24.04 LTS / Rocky Linux 9.4 / WSL2で動作確認済み

この記事のポイント

・プロセスとは「今まさに動いているプログラム1つ1つ」のこと
・フォアグラウンドは画面を占有する実行、バックグラウンドは裏で走らせる実行
・コマンド末尾に & を付けるとバックグラウンドで起動できる
・プロセスの一覧は ps、終了は kill で操作する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

プロセスとは何か:動いているプログラムの単位

プロセス(process)とは、メモリ上で実行中のプログラム1つ1つを指す言葉です。

たとえばテキストエディタのviを起動すれば「viのプロセス」が1つ生まれ、Webサーバーのnginxを起動すれば「nginxのプロセス」が1つ生まれます。プログラムそのもの(ディスク上のファイル)は「プログラム」と呼び、それをメモリに読み込んで実行している状態を「プロセス」と呼ぶ、と覚えておくと整理しやすいです。

Windowsで例えると、タスクマネージャーの「プロセス」タブで一覧できるものとほぼ同じです。Linuxではそれをコマンドで確認・操作していきます。

プログラム:ディスク上にある実行ファイル(例:/bin/ls、/usr/sbin/nginx)
プロセス:そのプログラムがメモリ上で実行されている状態
PID(プロセスID):Linuxが各プロセスに割り当てる一意の番号

プロセスには必ず「PID」という番号が付きます。この番号を使って、どのプロセスを対象にするかを指定するのが、Linuxのプロセス操作の基本です。
比較項目 Windows Linux
確認方法 タスクマネージャー(Ctrl+Shift+Esc) ps / top / htop コマンド
終了方法 「タスクの終了」ボタン kill コマンド + PID指定
裏で動かす ウィンドウを最小化 コマンド末尾に & を付ける
識別子 プロセスID(PID) プロセスID(PID)

フォアグラウンドとバックグラウンドの違い

Linuxのプロセスには、大きく分けて2つの動作モードがあります。

フォアグラウンド:ターミナルの画面を占有して動く(通常のコマンド実行)
バックグラウンド:ターミナルの裏側で動き、画面は自由に使える

普段コマンドを実行するのは「フォアグラウンド」です。たとえば ls -la と打てば一覧が表示されてすぐにプロンプトが戻ってきますが、時間のかかるコマンド(大きなファイルのコピー、ログの監視、サーバーの起動など)はその間ずっと画面が占有されて、次のコマンドを入力できなくなります。

そんなときに使うのが「バックグラウンド実行」です。コマンドの末尾に & を付けるだけで、プログラムを裏側で動かしつつ、ターミナルは別の作業に使えるようになります。

1. フォアグラウンドで実行してみる

まずは一番シンプルな形を見ていきます。

# 30秒間画面が止まる(フォアグラウンド実行) $ sleep 30 # この間、ターミナルは何も入力できない状態になる # 30秒経つとプロンプトが戻ってくる $

sleep 30 は「30秒間何もせずに待つ」コマンドです。実行すると30秒間プロンプトが戻ってこず、ターミナルは完全に占有されます。これがフォアグラウンド実行です。

2. バックグラウンドで実行してみる

同じコマンドの末尾に & を付けてみます。

# 末尾に & を付けるとバックグラウンドで実行 $ sleep 30 & [1] 18472 # すぐにプロンプトが戻ってくる # [1] はジョブ番号、18472 はPID(プロセスID) $ echo "別の作業ができる" 別の作業ができる

& を付けた瞬間、「[1] 18472」のような表示が出て、すぐにプロンプトが戻ります。これがバックグラウンド実行です。

角カッコの中の数字(ここでは [1])を「ジョブ番号」、その隣の数字(18472)を「PID」と呼びます。どちらもこのプロセスを指し示す識別番号ですが、ターミナル内だけで使うのがジョブ番号、Linux全体で使うのがPIDです。

3. フォアグラウンドとバックグラウンドを切り替える

実行中のプロセスを途中で切り替えることもできます。

# フォアグラウンドで動いている時に Ctrl+Z で一時停止 $ sleep 100 ^Z [1]+ Stopped sleep 100 # bg で一時停止中のジョブをバックグラウンドに回す $ bg [1]+ sleep 100 & # fg で再びフォアグラウンドに戻す $ fg sleep 100

操作の流れは次のとおりです。

Ctrl+Z:フォアグラウンドのプロセスを一時停止する
bg:一時停止したプロセスをバックグラウンドで再開する
fg:バックグラウンドのプロセスをフォアグラウンドに戻す

「画面を占有して困った」「裏で動かしたい」と思ったら、まず Ctrl+Z で止めて bg に回す、という流れを覚えておくと実務で役立ちます。

プロセスを確認する:ps コマンドの基本

今システムで動いているプロセスを確認するには、ps コマンドを使います。

# 自分が起動したプロセスを表示 $ ps PID TTY TIME CMD 18350 pts/0 00:00:00 bash 18472 pts/0 00:00:00 sleep 18501 pts/0 00:00:00 ps # システム全体のプロセスを詳細表示 $ ps aux | head USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 167940 11368 ? Ss Apr20 0:03 /usr/lib/systemd/systemd root 2 0.0 0.0 0 0 ? S Apr20 0:00 [kthreadd] root 515 0.0 0.1 76360 9456 ? Ss Apr20 0:01 /usr/sbin/sshd -D tomohiro 18350 0.0 0.1 12456 5120 pts/0 Ss 09:12 0:00 -bash tomohiro 18472 0.0 0.0 7280 1024 pts/0 S 09:15 0:00 sleep 30

各列の意味は次のとおりです。

PID:プロセスID(プロセスを一意に識別する番号)
USER:そのプロセスを起動したユーザー
%CPU / %MEM:CPU・メモリの使用率
STAT:プロセスの状態(S=待機、R=実行中、Z=ゾンビ)
COMMAND:実行されているコマンド

実務では ps aux の結果を grep と組み合わせて特定のプロセスを探す場面が多くあります。

# nginx のプロセスだけを表示 $ ps aux | grep nginx | grep -v grep root 3210 0.0 0.2 56172 4892 ? Ss Apr20 0:00 nginx: master process nginx 3211 0.0 0.3 56684 6456 ? S Apr20 0:12 nginx: worker process

grep -v grep を付けるのは、grep自身のプロセスを結果から除外するためです。これは初心者がつまずきやすい定番のお作法なので、セットで覚えておくと検索がすっきりします。

プロセスを終了する:kill コマンドの使い方

不要になったプロセスや、応答しなくなったプロセスを終了させるには kill コマンドを使います。

# PID 18472 のプロセスに終了シグナルを送る(穏やかな終了) $ kill 18472 # 反応しない場合は -9 で強制終了(最終手段) $ kill -9 18472 # プロセス名で一括終了 $ killall sleep

操作の使い分けは次のとおりです。

kill PID:プロセスに「終了してください」と依頼する(SIGTERM)
kill -9 PID:問答無用で強制終了する(SIGKILL、最終手段)
killall プロセス名:名前で一括して終了させる

初心者のうちは、つい kill -9 から使いたくなりますが、最初は kill(オプションなし)で穏やかに終了を試みて、どうしても止まらないときだけ -9 を使うのが現場の鉄則です。-9 はプロセスに後片付けの時間を与えないため、データ破損のリスクがあります。

よくあるトラブルとエラー対処法

「Ctrl+C を押してもコマンドが止まらない」

通常はフォアグラウンドのプロセスは Ctrl+C で中断できますが、一部のコマンド(viなど)は Ctrl+C では止まりません。それぞれのプログラムに「正規の終了方法」が決まっています。

vi / vim::q! で強制終了
less / more:q キー
top / htop:q キー
tail -f:Ctrl+C

それでも反応しない場合は、別のターミナルを開いて ps aux | grep プロセス名 でPIDを探し、kill するのが安全な終了方法です。

「& で起動したプロセスがログアウトで消えてしまう」

& でバックグラウンドに回したプロセスは、ターミナルを閉じる(ログアウトする)と一緒に終了してしまうことがあります。サーバー上で長時間動かしたいプログラムには nohupscreentmux を使うのが正解です。

# ログアウトしても動き続けるように起動 $ nohup long_running_script.sh & [1] 19824 nohup: ignoring input and appending output to 'nohup.out'

nohup を前に付けると、ターミナルを閉じてもプロセスは動き続けます。実行結果は nohup.out というファイルに自動で保存されます。

「ゾンビプロセス(STAT=Z)って何?」

ps aux の結果で STAT 列に「Z」が付いているプロセスを見かけることがあります。これは「ゾンビプロセス」と呼ばれ、すでに処理は終わっているのに、親プロセスがその終了を回収していない状態です。

少数であれば問題ありませんが、大量に発生する場合は親プロセス(プログラム)側のバグが疑われます。ゾンビ自体はメモリをほぼ消費しませんが、長時間残り続けるようなら親プロセスを再起動するのが対処法です。

本記事のまとめ

Linuxのプロセスは、最初こそ見えにくい概念ですが、一度理解してしまえばサーバー運用・アプリ開発・トラブル対応のすべてで必ず役に立つ土台になります。

まずは次の3つを手を動かして覚えることをおすすめします。

STEP1:sleep 30 & を実行してバックグラウンドの動きを体感する
STEP2:ps aux | grep 自分のユーザー名 で自分のプロセスを確認する
STEP3:kill でプロセスを穏やかに終了させる練習をする

私は20年以上Linuxサーバーを運用してきましたが、この3ステップを最初に押さえておくかどうかで、後のスキル伸長のスピードが大きく変わると実感しています。
やりたいこと コマンド
自分のプロセスを一覧で見る ps
システム全体のプロセスを詳細表示する ps aux
特定のプロセスだけ抜き出す ps aux | grep プロセス名 | grep -v grep
バックグラウンドで実行する コマンド &
実行中のプロセスを一時停止する Ctrl+Z
一時停止したプロセスを裏に回す bg
裏のプロセスを表に戻す fg
プロセスを穏やかに終了する kill PID
プロセスを強制終了する kill -9 PID
ログアウトしても動かし続ける nohup コマンド &

関連記事 ~ ここから実践的なスキルを身につける

プロセスの基本が押さえられたら、次は実際の現場で使うプロセス管理・監視・トラブル対応のスキルへ進みましょう。
以下の7つのテーマで、実務で使えるLinuxスキルをステップアップできます。

Linuxコマンド:killコマンドでプロセスを強制終了する方法 ~ kill -9やkillall・pkillの使い分け
シェルスクリプト:crontabでジョブをスケジューリングする方法 ~ プロセスを定期的に自動実行する
セキュリティ:sudoコマンドでroot権限を安全に実行する方法 ~ 権限を持つプロセスの扱い方
サーバー構築:systemctlコマンドでサービスを管理する方法 ~ サーバーのプロセスを起動・停止する
トラブルシューティング:htopコマンドでプロセスとリソースを監視する方法 ~ 重いプロセスを特定する
ネットワーク:lsofコマンドで使用中のファイル・ポートを確認する方法 ~ プロセスが使うポートを調べる
現場Tips:screenコマンドでSSH切断後もプロセスを実行し続ける方法 ~ 長時間プロセスの運用術
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
プロセス管理の基本を押さえたら、ぜひ次のステップとして実務で使えるサーバー構築スキルを身につけてみてください。
無料マニュアルを受け取る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。