LinuxC入門|Linuxにおけるプロセス管理の基本

Linux を使っていると、表では 1 つの操作しかしていないように見えても、実は裏側ではたくさんの処理が同時に動いています。
こうした「動いているプログラム」を、Linux では プロセス と呼び、OS がきちんと管理しています。

このページでは、「Linux におけるプロセス管理の基本」として、

  • プロセスとは何か
  • プロセスはいつ起動し、いつ終了するのか
  • 今どんなプロセスが動いているのかをどうやって確認するのか

といったポイントを、順を追ってやさしく解説していきます。
コマンド操作にまだ慣れていない方でも、イメージしやすいように表や具体例をたっぷり使って説明していきますね。

まずは、「プロセスって何?」というところから見ていきましょう。

ディスク上に保存されているプログラムは、ただ置いてあるだけでは動きません。
コマンドを実行したり、GUI アプリを起動したりすると、そのプログラムは メモリ上に読み込まれ、CPU によって処理されます。

この メモリ上で実行されている状態のプログラム を、Linux ではプロセスと呼びます。
そして処理が終わると、プロセスは自動的にメモリから消えます。
これを プロセスの終了 と言います。

一方で、前の節で登場したサービスのように、「停止せよ」と命令されるまで ずっとメモリ上に常駐し続けるプロセス もあります。
この違いを意識できるようになると、Linux の動きがぐっと分かりやすくなります。

プロセスには種類があり、それぞれ起動や終了のタイミングが異なります。
代表的なものを整理すると、次のようになります。

プロセスの種類と起動・終了のタイミング

プロセスの種類起動するタイミング終了するタイミング
CUI 上で実行するコマンドコマンドを実行したとき結果を出力したら終了
GUI ツールメニューやアイコンを選択閉じる操作をしたとき
サービスシステム起動時や手動起動停止操作を行ったとき

たとえば ls や cp のようなコマンドは、実行するとすぐに起動し、処理が終わればすぐに終了します。
一方で、SSH サーバのようなサービスは、停止するまでずっと動き続けます。

AlmaLinux の GUI 環境では、ターミナル自体も 1 つのプロセスとして動いています。
GNOME 環境の場合、ターミナルは gnome-terminal-server というプロセスで、その上で bash プロセス(シェル)が起動し、さらにその中で各種コマンドが実行されます。

このような プロセスの親子関係 を確認するために、まずは ps コマンドを見てみましょう。

ps コマンドとは

ps は、現在動作しているプロセスを一覧表示するコマンドです。

コマンド書式

ps [オプション]

実行例(プロセスの親子関係を表示)

[suzuki@AlmaLinux ~]$ ps axf
    PID TTY      STAT   TIME COMMAND
      2 ?        S      0:00 [kthreadd]
      3 ?        S      0:00  \_ [pool_workqueue_]
      4 ?        I<     0:00  \_ [kworker/R-rcu_g]
      5 ?        I<     0:00  \_ [kworker/R-sync_]
      6 ?        I<     0:00  \_ [kworker/R-slub_]
      7 ?        I<     0:00  \_ [kworker/R-netns]
      9 ?        I<     0:00  \_ [kworker/0:0H-events_highpri]
     10 ?        I      0:00  \_ [kworker/u8:0-events_unbound]
(省略)

このコマンドを実行すると、どのプロセスから、どのプロセスが生まれたのか」を確認するのにとても便利です。

次に、特定の名前を持つプロセスを探す方法を見てみましょう。

pgrep コマンドとは

pgrep は、動作中のプロセスの中から、指定した名前を持つプロセスを検索して表示するコマンドです。

コマンド書式

pgrep [オプション] キーワード

主なオプション

オプション説明
-lPID と一緒にプロセス名も表示
-u ユーザー指定したユーザーで動作しているプロセスを表示

実行例(sshd プロセスを検索)

[suzuki@AlmaLinux ~]$ pgrep -l sshd
1119 sshd

この例では、sshd という名前のプロセスが PID 1119 で動いていることが分かります。
「このサービス、今ちゃんと動いているかな?」という確認にもよく使われます。

システム全体の状態と、動いているプロセスを リアルタイム に確認したいときには、top コマンドがとても便利です。

top コマンドとは

top は、現在動作しているプロセスや、CPU・メモリなどのシステムリソースの状態をリアルタイムに表示するコマンドです。

コマンド書式

top [オプション]

主なキー操作

キー説明
qtop を終了
kプロセスを停止
d表示の更新間隔を変更

実行例

[suzuki@AlmaLinux ~]$ top

top - 17:29:49 up  1:50,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 212 total,   1 running, 211 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.7 sy,  0.0 ni, 97.8 id,  0.0 wa,  1.2 hi,  0.0 si,  0.0 st
MiB Mem :   1707.2 total,    402.3 free,    904.8 used,    576.7 buff/cache
MiB Swap:   2048.0 total,   1909.6 free,    138.4 used.    802.4 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND  
   2184 suzuki    20   0 4078688 196244  52952 S   5.0  11.2   0:17.76 gnome-s+ 
   2820 suzuki    20   0  917324  44820  31136 S   1.0   2.6   0:02.68 gnome-t+ 
     56 root      20   0       0      0      0 I   0.3   0.0   0:00.30 kworker+ 
(省略)

top を実行すると、既定では 3 秒ごとに表示が更新されます。
CPU を多く使っているプロセスが上に表示されるため、「今、どのプロセスが重たいのか」をすぐに把握できます。

表示内容を確認したら、q キーを押して終了します。

top に表示される情報の一部は、個別のコマンドでも確認できます。

uptime コマンド

uptime は、システムがどれくらいの時間稼働しているかや、現在の負荷状況を表示します。

[suzuki@AlmaLinux ~]$ uptime
 17:30:28 up  1:51,  2 users,  load average: 0.00, 0.00, 0.00

free コマンド

free は、メモリの使用状況を一覧で表示するコマンドです。

[suzuki@AlmaLinux ~]$ free
               total        used        free      shared  buff/cache   available
Mem:         1748132      926744      411656        4224      590476      821388
Swap:        2097148      141696     1955452

メモリ全体の容量、使用量、空き容量、スワップの状態などをまとめて確認できます。

ここまで見てきたように、Linux では すべての処理がプロセスとして管理 されています。
プロセスの起動と終了、そして現在の状態を把握できるようになると、トラブル対応やパフォーマンス確認がとても楽になります。

「今、何が動いているのか」を意識できるようになることが、Linux 管理の第一歩です。

プロセス管理の基本を押さえておくと、この先に学ぶジョブ管理やサービス管理も、自然と理解しやすくなります。
まずは「プロセスってこういうものなんだな」と、全体のイメージをつかんでいきましょう。