Linuxプロセス管理完全ガイド|監視・ジョブ制御・シグナル送信【LinuC 1.01.4対応】

LinuC対策

この記事はLinuC Level1 主題1.01.4「プロセスの生成、監視、終了」に対応した要点解説です。試験で問われる範囲に絞り、プロセス監視系(ps/top/pstree/pgrep/uptime/w/free)、ジョブ制御(&/jobs/fg/bg)、永続実行(nohup/screen/tmux)、シグナル送信(kill/pkill/killall)の弁別を整理しました。

📚 LinuC Level1 完全攻略マップ(全39サブ項目)へ戻る


目次

  1. この記事でできるようになること
  2. psでプロセスを表示する(UNIX形式とBSD形式)
  3. top/pstree/uptime/w/free/pgrep
  4. ジョブ制御:&/jobs/fg/bg
  5. ログアウト後も継続実行:nohup/screen/tmux
  6. シグナル:SIGTERM/SIGKILL/SIGHUP/SIGSTOP/SIGTSTP/SIGCONT/SIGINT
  7. kill/pkill/killallでシグナルを送る
  8. よくある質問(FAQ)
  9. まとめ
  10. 模擬問題にチャレンジ(ランダム出題)

1. この記事でできるようになること

  • プロセス一覧の基本コマンドpsと、UNIX形式(ハイフン有)BSD形式(ハイフン無)の違い
  • ps -f(full format)/ps f(forest=ツリー)/ps -lps l(long format, PPID/NI付き)/ps u(ユーザ向け整形)の弁別
  • リアルタイム監視top、親子関係pstree、稼働時間と負荷uptimew、メモリfree、名前→PID検索pgrep
  • ジョブ制御:&で背景起動、Ctrl+Zで一時停止、fgで前景復帰、bgで背景で再開、jobsで一覧
  • fgbgのジョブ指定書式:%NN%文字列
  • 永続実行:nohup cmd > file &、端末多重化はscreentmux(デタッチ・アタッチ可)
  • 主要シグナル:SIGTERM(15)/SIGKILL(9)/SIGHUP(1)/SIGSTOP(19)/SIGTSTP(20)/SIGCONT/SIGINT(2)の役割
  • killの4書式(-9-KILL-SIGKILL-s KILL)、pkillkillallとの使い分け
  • ps ax | grepが自分自身にヒットしてしまう問題と、pgrepps -Cによる回避

2. psでプロセスを表示する(UNIX形式とBSD形式)

ps(process status)はLinuxの標準プロセス一覧コマンドです。オプションを付けなければ現在の端末の自分のプロセスだけが表示され、全プロセスを見たいときはps auxps -efを使います。

2-1. 2大書式:UNIX形式とBSD形式

psのオプションはハイフンの有無で機能が変わるのが最大の特徴で、同じ文字でも-ffはまったく別の意味になります。

書式 代表例 意味
UNIX形式(ハイフン有) ps -ef 全プロセス+親PID(PPID)を詳細列で
BSD形式(ハイフン無) ps aux 全ユーザの全プロセス+%CPU/%MEM列を整形表示

2-2. オプションの弁別(頻出)

オプション 系統 意味
-f UNIX full format:UID・PID・PPID・C・STIME・TTY・TIME・CMDの詳細列を表示
f BSD forest=ツリー表示。親子関係を罫線で描画(ps --forestも同等)
-l UNIX long format:F・S・UID・PID・PPID・C・PRI・NI(nice値)・ADDR・SZ・WCHAN・TTY・TIME・CMDまで表示
l BSD BSDのlong format。PPIDとNIを含む詳細表示
u BSD ユーザ向け整形:USER・%CPU・%MEM列を追加(ps auxu)
-u USER UNIX 指定ユーザでフィルタ(整形ではなく絞り込み)
a BSD 自分以外のユーザのプロセスも対象に
x BSD 制御端末を持たないプロセスも対象に
-e-A UNIX 全プロセス
-p PID UNIX 指定PIDのみ
-C NAME UNIX 指定コマンド名のみ(自己マッチしない)
試験頻出:ハイフンの有無で意味が変わる
ps -ffull format(詳細列)
ps fforest(ツリー表示)
ps -lps llong format(PPIDやNIまで含む)
ps u … ユーザ向け整形(%CPU/%MEM列が付く)
ps -u USER … 指定ユーザで絞り込み(意味がまったく違う)

2-3. 親子関係をツリーで表示する2つの方法

コマンド 動作
pstree 専用の木構造表示コマンド(-pでPID付き)
ps f BSD形式のforestオプション。罫線で親子関係を描画

選択肢で「ツリー表示はどれか」と問われたらpstreeまたはps f(ハイフン無)。ps -f(ハイフン有)は詳細列表示で別物なので混同注意。


3. top/pstree/uptime/w/free/pgrep

3-1. top:一定時間ごとに更新するリアルタイム監視

topは画面を一定間隔(デフォルト3秒)で更新しながら、CPU・メモリ・プロセスの稼働状況を表示します。画面最上部にはuptimeと同じ稼働時間・ログインユーザ数・load averageが出ます。

$ top
top - 09:30:19 up 1:24, 2 users, load average: 0.08, 0.02, 0.00
Tasks: 108 total, 1 running, 107 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.5 sy, 0.0 ni, 98.5 id, ...
MiB Mem : 3861.2 total, 2408.5 free, 588.1 used, 864.6 buff/cache
...

3-2. uptimew:稼働時間とload average

コマンド 表示内容
uptime 現在時刻・稼働時間・ログインユーザ数・load average(1/5/15分) の1行サマリ
w uptimeの情報+ログイン中ユーザごとのTTY・接続元・アイドル時間・CPU使用
top 画面上部に同じ稼働時間とload averageを表示

load average(負荷平均)はCPUの実行待ちプロセス数の平均で、CPU数を超えると過負荷の目安です。

3-3. free:メモリ・スワップの使用状況

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          7.7Gi       1.2Gi       2.3Gi       128Mi       4.2Gi       6.2Gi
Swap:         2.0Gi          0B       2.0Gi

freeはメモリ・スワップの総容量・使用量・空き・バッファ/キャッシュを表示します。-hで人間可読単位、-mでMB単位。topも画面上部にメモリ情報が出ますが、こちらはリアルタイム監視用です。

3-4. pgrep:名前でPIDを検索

# パターンにマッチするプロセスのPIDを取得
$ pgrep httpd

# testユーザが実行している特定名プロセスのPID
$ pgrep -u test プロセス名

# コマンド付きで表示
$ pgrep -a nginx

pgrep パターンで名前マッチするプロセスのPID一覧を取得できます。-u ユーザ名を併用するとユーザと名前の両方でフィルタ。pkillは同じマッチングでシグナルを送る操作コマンドで、目的が違います。

3-5. ps | grep 自己マッチ問題と回避策

ps ax | grep httpdと実行すると、grep自身の行もマッチして結果が1件多くなるのが古典的な罠です。

$ ps ax | grep httpd
  892 ?    Ss  0:00 /usr/sbin/httpd -DFOREGROUND
 1340 pts/0 S+ 0:00 grep --color=auto httpd   ← grep自身がマッチ

# 解決1:pgrep を使う(grepを挟まない=自己マッチしない)
$ pgrep httpd

# 解決2:ps -C でコマンド名を直接フィルタ
$ ps -C httpd

4. ジョブ制御:&/jobs/fg/bg

1つの端末で複数のコマンドを行き来するための仕組みがジョブ制御です。

4-1. 基本4コマンド

操作 動作
行末に& 新規コマンドをバックグラウンドで起動しすぐプロンプトへ戻る
Ctrl+Z フォアグラウンドのジョブにSIGTSTPを送り一時停止
fg バックグラウンド/一時停止中のジョブをフォアグラウンドに戻す
bg 一時停止中のジョブをバックグラウンドで再開
jobs 現在のシェルが管理するバックグラウンド/停止中ジョブの一覧(-lでPID付き)

jobsが表示するのはそのシェルが管理するジョブのみで、システム全体のプロセス一覧ではありません。全プロセスを見たいときはps

他の記号との弁別
& … バックグラウンド起動(行末に付ける)
; … コマンド区切り(前コマンドの成否に関係なく順次実行)
&& … 前コマンドが成功したら次を実行
| … パイプ(前の標準出力を次の標準入力へ)

4-2. fgbgのジョブ指定書式

ジョブ番号2のジョブ(例: vim test.txt)をフォアグラウンドに戻す書式はいくつかあります。

書式 意味
fg %2 ジョブ番号2を指定(%N表記)
fg 2 %なしでジョブ番号を渡す(bashで解釈可)
%2 単独でも「ジョブ2をフォアグラウンドで再開」と解釈
fg %vim %文字列はジョブ名の先頭一致指定
fg vim %なしの文字列は引数解釈されない

4-3. 一時停止ジョブをバックグラウンドで再開する流れ

$ vim memo.txt
# Ctrl+Z で一時停止 → ジョブ番号が表示される

$ jobs
[2]+  Stopped    vim memo.txt

$ bg %2           # ジョブ2をバックグラウンドで再開
$ fg %2           # 必要ならフォアグラウンドに戻す

5. ログアウト後も継続実行:nohup/screen/tmux

5-1. nohup:SIGHUPを無視して起動

端末(シェル)が閉じるとき、そのシェルは子プロセスにSIGHUP(端末切断通知)を送ります。これを無視させる専用コマンドがnohupです。nohup コマンド &の形で起動すれば、ログアウト後も処理が継続します。

# ping を nohup + & でログアウト耐性付きのバックグラウンド実行に
$ nohup ping localhost > ping.txt &
[1] 1300
nohup: ignoring input and appending output to 'nohup.out'

標準出力は明示指定しなければnohup.outに書かれます。この書式が「ログアウト後もバックグラウンドで実行し続けさせたい」に対する定番解答です。

5-2. screentmux:端末多重化(デタッチ・アタッチ)

screentmux端末多重化ツールで、1つのセッション内に複数の仮想端末(シェル・ペイン)を保持でき、デタッチして後で別のターミナルからアタッチし直せるのが特徴です。nohupは単にSIGHUPを無視させるだけで、多重化やアタッチ機能はありません。

# screen を開始 → 作業 → Ctrl+A D でデタッチ
$ screen
$ screen -ls          # セッション一覧
$ screen -r           # 再アタッチ

# tmux も同様に開始 → Ctrl+B D でデタッチ
$ tmux
$ tmux ls
$ tmux attach

6. シグナル:SIGTERM/SIGKILL/SIGHUP/SIGSTOP/SIGTSTP/SIGCONT/SIGINT

シグナルはプロセスへの通知で、番号と名前のペアで管理されます。LinuC 1.01.4で押さえるべきものを整理します。

番号 名前 役割 捕捉・無視
1 SIGHUP 端末切断通知。デーモンでは慣習的に設定ファイル再読み込みのトリガ
2 SIGINT 割り込み。端末のCtrl+Cがこれを送る
9 SIGKILL 強制終了。捕捉・ブロック不能で即終了(クリーンアップ不可) 不可
15 SIGTERM 正常終了要求(killのデフォルト)。プロセスは後処理してから終了できる
18 SIGCONT 停止中のプロセスを再開
19 SIGSTOP 一時停止(捕捉不能・強制停止) 不可
20 SIGTSTP 一時停止(捕捉可能、端末のCtrl+Z由来)
似た役割のシグナルの弁別
・終了:正常=SIGTERM(15)/強制=SIGKILL(9)
・一時停止:SIGSTOP(19)(強制)/SIGTSTP(20)(Ctrl+Z)、再開はSIGCONT
・割り込み(Ctrl+C)はSIGINT(2)。強制終了のSIGKILL(9)とは別物
SIGHUP(1)は端末切断通知。デーモンの設定再読み込みに使われる

6-1. killのデフォルトシグナル

kill PIDのようにシグナルを指定しないと、送られるのはSIGTERM(15)です。SIGTERMは「正常に終わってくれ」という要求で、プロセス側で後処理やファイルの書き込み完了が可能。クリーンアップを省いて即終了させたいときだけSIGKILL(9)を使います。

6-2. キー操作とシグナルの対応

キー 送られるシグナル 動作
Ctrl+C SIGINT(2) 割り込み・終了
Ctrl+Z SIGTSTP(20) 一時停止
Ctrl+D (シグナルではなくEOF送信) 入力終端
Ctrl+SCtrl+Q (端末フロー制御) 出力停止/再開

7. kill/pkill/killallでシグナルを送る

7-1. シグナルを指定する4つの書式

killでSIGKILLを送る方法は4通りあり、いずれも等価です。選択肢で書式を並べて問われることが多いので、パターンごと覚えておきます。

書式 例(SIGKILLを送る場合)
-番号 kill -9 1300
-名前(SIGプレフィックス省略可) kill -KILL 1300
-SIG名前 kill -SIGKILL 1300
-s シグナル kill -s KILL 1300kill -s 9 1300

SIGINTならkill -2kill -INTkill -SIGINTkill -s INTがすべて同じ送信になります。Ctrl+Cも端末からフォアグラウンドプロセスへSIGINTを送る動作です。

7-2. PID指定とジョブ指定

# PIDを指定(デフォルト=SIGTERM)
$ kill 1300

# ジョブ番号で送る(% 付き)
$ kill %1
$ kill -9 %2

# 送れるシグナル一覧と番号⇔名前変換
$ kill -l
$ kill -l 9
KILL

7-3. 名前でシグナルを送る:pkillkillall

コマンド 指定方法 補足
kill PIDまたはジョブ(%N) デフォルトSIGTERM
pkill 名前パターン(部分一致) 通常1つのパターン、-u ユーザ等で絞れる
killall コマンド名(完全一致) 複数のコマンド名を引数に並べて一括送信可
pgrep 名前パターン(部分一致) PID一覧を表示のみ(シグナルは送らない)
jobs ジョブ一覧の表示のみ(シグナル送信機能なし)
# mycommand 全プロセスをSIGTERMで正常終了
$ killall mycommand
$ pkill mycommand

# 複数コマンド名を一括で(killall の得意技)
$ killall mycommand mycommand2 mycommand3

# SIGKILLで強制終了
$ pkill -9 firefox

「シグナルを送れる」のはkillpkillkillallの3つ。pgrepは検索表示のみ、jobsはジョブ一覧表示のみで、いずれもシグナル送信機能はありません。


8. よくある質問(FAQ)

kill PIDのデフォルトシグナルは?

SIGTERM(15)です。プロセスに「正常終了してほしい」と通知し、プロセス側で後処理が可能。クリーンアップを省いて即終了させたい場合のみkill -9(SIGKILL)を使います。

ps fps -fは何が違う?

ハイフンの有無で意味が変わります。ps f(BSD形式、ハイフン無)はforest=ツリー表示で親子関係を罫線で描画。ps -f(UNIX形式、ハイフン有)はfull formatでPPIDやSTIMEなどの詳細列を追加します。

SIGSTOPとSIGTSTPの違いは?

どちらも一時停止シグナルですが、SIGSTOP(19)は捕捉不能で必ず停止、SIGTSTP(20)は捕捉可能で端末のCtrl+Zが送るシグナルです。いずれもSIGCONTで再開できます。

nohupscreentmuxはどう使い分ける?

nohupはSIGHUPを無視させるだけで単発の長時間ジョブ向き。screentmux端末多重化ツールで、デタッチして別端末からアタッチし直せます。対話的な作業を継続したいならscreentmux

ps ax | grep nameが1件多く出る理由は?

grepコマンド自体が動作中のプロセスとしてリストに含まれ、それがnameにマッチしてしまうためです。pgrep nameps -C nameを使えば自己マッチは起きません。


9. まとめ

  • psUNIX形式(ハイフン有)とBSD形式(ハイフン無)が混在。-f=full、f=forest、-l/l=long(PPID/NI付き)、u=ユーザ向け整形、-u USER=フィルタ
  • ツリー表示はpstreeまたはps f。詳細列はps -f
  • リアルタイム監視はtop(デフォルト3秒更新)、稼働時間とload averageはuptimewtop、メモリ/スワップはfree
  • 名前→PIDはpgrep(-u ユーザで絞れる)。ps|grepの自己マッチはpgrepps -Cで回避
  • ジョブ制御:行末&で背景起動、Ctrl+Zで一時停止(SIGTSTP)、fgで前景復帰、bgで背景再開、jobsで一覧(そのシェル内のみ)
  • fgのジョブ指定は%NN%文字列%N単独。fg 文字列(%なし)は不可
  • ログアウト耐性はnohup コマンド > file &。対話作業の継続はscreentmux(デタッチ・アタッチ)
  • シグナル:SIGTERM(15)正常終了(killデフォルト)/SIGKILL(9)強制終了(捕捉不能)/SIGHUP(1)端末切断・設定再読込/SIGINT(2)Ctrl+C/SIGSTOP(19)強制停止(捕捉不能)/SIGTSTP(20)Ctrl+Z/SIGCONT再開
  • killの書式は-番号-名前-SIG名前-s シグナルの4通り。PIDでもジョブ(%N)でも送れる
  • 名前でシグナルを送れるのはpkill(部分一致)とkillall(完全一致、複数名並べ可)。pgrepは表示のみ、jobsは一覧のみで送信機能なし

📚 次の主題:X Window Systemとデスクトップ環境の基礎(LinuC 1.01.5)


10. 模擬問題にチャレンジ(ランダム出題)

ここまでの内容を本試験に近い形で確認できます。問題数を選んで「出題スタート」を押すと、主題1.01.4の問題プールからランダムに出題されます。選択肢をクリック/タップすると、正誤と解説がその場で表示されます。

合格ライン目安:75%以上。もっと幅広く解きたい場合はLinuC 模擬問題ポータルから他の分野にも挑戦できます。


おすすめの教材


Linux教科書 LPICレベル1

Linux教科書 LPICレベル1 Version 5.0対応(あずき本)

プロセス管理も詳しく解説。LinuC/LPIC Level1 の定番参考書。


Amazonで見る →

【ウズカレ式】1週間でLinuxの基本操作と管理・運用スキルが学べる講座

累計80,000人以上受講。LinuC Level1を1週間で網羅。


Udemyで講座を見る →


関連記事

📚 LinuC Level1 完全攻略マップへ戻る
全39サブ項目のシラバス準拠マップから他の記事を探せます

Dockerの基礎を動画で体系的に学びませんか?

実務で使う基礎だけを3時間に凝縮。環境構築から丁寧に解説しています。

Udemy Docker入門講座 クーポン割引で講座を見る →

コメント

タイトルとURLをコピーしました