「"&" を付けると裏で動く、と聞いたけれど、何が起きているのかイメージできない。」
Linuxを使い始めたばかりの方が最初にぶつかる混乱のひとつが「プロセス」という概念です。Windowsでは画面の「×ボタン」でアプリを閉じるのが当たり前ですが、Linuxのターミナルにはそのようなボタンがありません。代わりに、今動いているプログラムを「プロセス」として捉え、必要に応じて裏へ回したり止めたりする発想が必要になります。
この記事では、Linuxのプロセスの考え方を、完全な初心者の方にもわかるように図解的に解説します。
フォアグラウンドとバックグラウンドの違い、プロセスの確認・終了の仕方まで、最初の一歩として必要な知識を順を追って押さえていきます。
実行環境: Ubuntu 24.04 LTS / Rocky Linux 9.4 / WSL2で動作確認済み
この記事のポイント
・プロセスとは「今まさに動いているプログラム1つ1つ」のこと
・フォアグラウンドは画面を占有する実行、バックグラウンドは裏で走らせる実行
・コマンド末尾に & を付けるとバックグラウンドで起動できる
・プロセスの一覧は ps、終了は kill で操作する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
プロセスとは何か:動いているプログラムの単位
プロセス(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 するのが安全な終了方法です。
「& で起動したプロセスがログアウトで消えてしまう」
& でバックグラウンドに回したプロセスは、ターミナルを閉じる(ログアウトする)と一緒に終了してしまうことがあります。サーバー上で長時間動かしたいプログラムには nohup や screen・tmux を使うのが正解です。# ログアウトしても動き続けるように起動 $ 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サーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
プロセス管理の基本を押さえたら、ぜひ次のステップとして実務で使えるサーバー構築スキルを身につけてみてください。
無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxのリダイレクトとパイプ入門|初心者でも迷わないコマンド連携の基本
- 前のページへ:LinuxへのSSH接続入門|初心者でも安全にリモートサーバーにつなぐ方法
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます