Linuxプロセス管理の基本をマスター!なぜ重要なのか初心者向けに徹底解説
生徒
「Linuxを使っていると『プロセス』という言葉をよく聞くのですが、これって何のことですか?」
先生
「プロセスというのは、簡単に言うと『現在動いているプログラム』のことですよ。人間でいうと、今まさに作業をしている状態のことですね。」
生徒
「なるほど!でも、動いているなら放っておいてもいい気がしますが、なぜ『管理』が必要なんですか?」
先生
「それはとても大切なポイントです。パソコンのパワーには限りがあるので、誰かが交通整理をしてあげないと、動作が重くなったり止まったりしてしまうからです。詳しく見ていきましょう!」
1. プロセスとは?プログラムとの違いを解説
Linuxを学ぶ上で避けて通れないのが「プロセス」という概念です。プログラミング未経験の方には少し難しく感じるかもしれませんが、身近な例で考えると非常にシンプルです。
「プログラム」とは、ハードディスクなどの保存場所に眠っている「料理のレシピ本」のようなものです。これに対して「プロセス」とは、そのレシピ本を見て実際にキッチンで料理を作っている「調理中の状態」を指します。
パソコンの中で、私たちがブラウザを開いてインターネットを見たり、テキストエディタで文字を書いたりするとき、その裏側では必ず「プロセス」が立ち上がり、CPU(パソコンの頭脳)やメモリ(作業机)を使って動いています。
つまり、「実行中のプログラム = プロセス」と覚えておけば間違いありません。Linuxはこのプロセスを一つひとつに背番号(プロセスID)をつけて管理しています。
2. なぜプロセス管理が重要なのか?
Linuxでプロセス管理を行う最大の理由は、システムの安定性を保つためです。もしプロセス管理が適切に行われていないと、以下のような困った事態が発生します。
- 特定のプログラムが暴走して、パソコン全体の動きがガクガクになる。
- メモリを使いすぎてしまい、他の大事なソフトが強制終了してしまう。
- 終わったはずのプログラムが居座り続け、資源を無駄遣いする。
サーバーとして使われることが多いLinuxにとって、勝手にシステムが止まることは許されません。そのため、管理者が「どのプロセスがどれくらい頑張っているか」を監視し、必要であれば「ちょっと休んで」とか「終了して」と命令を下す必要があるのです。これが「プロセス管理」の役割です。
3. 動いているプロセスを確認する「ps」コマンド
まずは、今自分のパソコンの中でどんなプロセスが動いているのかを覗いてみましょう。これにはpsコマンドを使います。これは「Process Status(プロセスの状態)」の略です。
特によく使われるのが、システム全体のプロセスを詳細に表示するps auxという組み合わせです。以下のコマンドを打ってみましょう。
ps aux | head -n 5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 168604 9688 ? Ss Jan08 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S Jan08 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Jan08 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Jan08 0:00 [rcu_par_gp]
ここで注目してほしいのは「PID」という項目です。これは「プロセスID」の略で、Linuxがプロセスを識別するためのマイナンバーのようなものです。この数字を使って、特定のプロセスを止めたり操作したりします。
4. リアルタイムで監視する「top」コマンド
psコマンドは「その瞬間」の切り抜き写真のようなものですが、刻一刻と変わる状況を動画のように見守りたいときはtopコマンドを使います。
Windowsでいう「タスクマネージャー」に近い機能で、どのプログラムが一番CPUを使っているかがリアルタイムで更新されます。
top
top - 10:30:01 up 1 day, 2:15, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7950.1 total, 5432.5 free, 850.2 used, 1667.4 buff/cache
「zombie(ゾンビ)」という怖い言葉が見えますね。これは、実行が終わったのに管理リストから消えずに残ってしまっているプロセスのことです。こうした「お化け」プロセスが増えすぎないように監視するのも、管理の重要な仕事です。
5. 暴走したプロセスを止める「kill」コマンド
もし、特定のプログラムがフリーズして動かなくなったり、パソコンに大きな負荷をかけたりしていたら、管理者の手で強制的に終了させる必要があります。その時に使うのがkillコマンドです。
「殺す」という物騒な名前ですが、要するに「プロセスに対して終了の合図を送る」という意味です。使い方は、先ほどのpsコマンドで調べた「PID(プロセスID)」を指定します。
例えば、PIDが「1234」のプロセスを終了させたい場合は次のように入力します。
kill 1234
これでも止まらない頑固なプロセスの場合は、より強力な「強制終了(-9オプション)」を使います。これは最後の手段として覚えておきましょう。
kill -9 1234
6. ジョブ管理とは?プロセスとの違いを知ろう
プロセスに似た言葉で「ジョブ」というものがあります。これは「シェル(コマンドを入力する画面)」から見た作業の単位です。
例えば、大きなファイルをダウンロードしながら、同じ画面で別の文字入力を続けたい場合がありますよね。このように、一つの窓(ターミナル)の中で並行して行う作業のことをジョブと呼びます。
ジョブには「フォアグラウンド」と「バックグラウンド」の2つの状態があります。
- フォアグラウンド: 今まさに画面で操作している作業。
- バックグラウンド: 画面の裏側で見えないように進めている作業。
7. 作業を裏側に回す!バックグラウンド実行の方法
Linuxでは、コマンドの最後に「&(アンパサンド)」をつけるだけで、その作業をバックグラウンド(裏側)で実行させることができます。
例えば、5秒間何もしないsleepというコマンドを裏で動かしてみましょう。
sleep 500 &
[1] 5678
このように入力すると、すぐに次の入力ができる状態に戻ります。[1] 5678というのは、「1番目のジョブとして、プロセスID 5678で動かし始めたよ」という報告です。これを知っているだけで、時間のかかる処理を放置しながら他の作業を進められるようになります。
8. 実行中のジョブを確認・操作するコマンド
裏側で動かしているジョブがどうなっているかを確認するには、jobsコマンドを使います。
jobs
[1]+ Running sleep 500 &
「Running(実行中)」と表示されていますね。もしこの裏側の作業をまた目の前の画面に戻したい(フォアグラウンドにしたい)時は、fgコマンドを使います。逆に、今やっている作業を一時停止して裏に送りたい時は「Ctrl + Z」キーを押してからbgコマンドを使います。
このように、プロセスやジョブを自在にコントロールできるようになると、Linuxがまるで手足のように動かせるようになります。初心者のうちは、まず「変な動きをしたらPIDを調べてkillする」という流れを覚えておくだけでも、大きな一歩です。
9. 管理者権限が必要なプロセスの扱い
自分以外のユーザーが動かしているプロセスや、システム全体の根幹に関わるプロセスを操作するには、「管理者(root)」という特別な権限が必要です。一般ユーザーでは、自分自身のプロセスしか止めることができません。
システム全体のメンテナンスや、暴走した他人のプログラムを止める際は、sudoコマンドを先頭につけて実行します。これは「SuperUser DO」の略で、一時的に王様の権限を借りる命令です。
sudo kill 9999
管理者権限は非常に強力です。間違ったプロセス(例えばシステムが動くために必須なもの)を止めてしまうと、最悪の場合パソコンが再起動できなくなることもあります。慣れないうちは、自分が立ち上げたプロセスだけを対象に練習してみるのが安全です。プロセス管理をマスターして、快適なLinuxライフを送りましょう!