この記事はLinuC Level1 主題1.01.4「プロセスの生成、監視、終了」に対応した要点解説です。試験で問われる範囲に絞り、プロセス監視系(ps/top/pstree/pgrep/uptime/w/free)、ジョブ制御(&/jobs/fg/bg)、永続実行(nohup/screen/tmux)、シグナル送信(kill/pkill/killall)の弁別を整理しました。
📚 LinuC Level1 完全攻略マップ(全39サブ項目)へ戻る
目次
- この記事でできるようになること
- psでプロセスを表示する(UNIX形式とBSD形式)
- top/pstree/uptime/w/free/pgrep
- ジョブ制御:
&/jobs/fg/bg - ログアウト後も継続実行:nohup/screen/tmux
- シグナル:SIGTERM/SIGKILL/SIGHUP/SIGSTOP/SIGTSTP/SIGCONT/SIGINT
- kill/pkill/killallでシグナルを送る
- よくある質問(FAQ)
- まとめ
- 模擬問題にチャレンジ(ランダム出題)
1. この記事でできるようになること
- プロセス一覧の基本コマンド
psと、UNIX形式(ハイフン有)/BSD形式(ハイフン無)の違い ps -f(full format)/ps f(forest=ツリー)/ps -l・ps l(long format, PPID/NI付き)/ps u(ユーザ向け整形)の弁別- リアルタイム監視
top、親子関係pstree、稼働時間と負荷uptime/w、メモリfree、名前→PID検索pgrep - ジョブ制御:
&で背景起動、Ctrl+Zで一時停止、fgで前景復帰、bgで背景で再開、jobsで一覧 fg/bgのジョブ指定書式:%N/N/%文字列- 永続実行:
nohup cmd > file &、端末多重化はscreen/tmux(デタッチ・アタッチ可) - 主要シグナル:SIGTERM(15)/SIGKILL(9)/SIGHUP(1)/SIGSTOP(19)/SIGTSTP(20)/SIGCONT/SIGINT(2)の役割
killの4書式(-9/-KILL/-SIGKILL/-s KILL)、pkill/killallとの使い分けps ax | grepが自分自身にヒットしてしまう問題と、pgrep/ps -Cによる回避
2. psでプロセスを表示する(UNIX形式とBSD形式)
ps(process status)はLinuxの標準プロセス一覧コマンドです。オプションを付けなければ現在の端末の自分のプロセスだけが表示され、全プロセスを見たいときはps auxやps -efを使います。
2-1. 2大書式:UNIX形式とBSD形式
psのオプションはハイフンの有無で機能が変わるのが最大の特徴で、同じ文字でも-fとfはまったく別の意味になります。
| 書式 | 代表例 | 意味 |
|---|---|---|
| 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 auxのu) |
-u USER |
UNIX | 指定ユーザでフィルタ(整形ではなく絞り込み) |
a |
BSD | 自分以外のユーザのプロセスも対象に |
x |
BSD | 制御端末を持たないプロセスも対象に |
-e/-A |
UNIX | 全プロセス |
-p PID |
UNIX | 指定PIDのみ |
-C NAME |
UNIX | 指定コマンド名のみ(自己マッチしない) |
・
ps -f … full format(詳細列)・
ps f … forest(ツリー表示)・
ps -l/ps l … long 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. uptime/w:稼働時間と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. fg/bgのジョブ指定書式
ジョブ番号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. screen/tmux:端末多重化(デタッチ・アタッチ)
screenとtmuxは端末多重化ツールで、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+S/Ctrl+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 1300/kill -s 9 1300 |
SIGINTならkill -2/kill -INT/kill -SIGINT/kill -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. 名前でシグナルを送る:pkill/killall
| コマンド | 指定方法 | 補足 |
|---|---|---|
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
「シグナルを送れる」のはkill/pkill/killallの3つ。pgrepは検索表示のみ、jobsはジョブ一覧表示のみで、いずれもシグナル送信機能はありません。
8. よくある質問(FAQ)
kill PIDのデフォルトシグナルは?
SIGTERM(15)です。プロセスに「正常終了してほしい」と通知し、プロセス側で後処理が可能。クリーンアップを省いて即終了させたい場合のみkill -9(SIGKILL)を使います。
ps fとps -fは何が違う?
ハイフンの有無で意味が変わります。ps f(BSD形式、ハイフン無)はforest=ツリー表示で親子関係を罫線で描画。ps -f(UNIX形式、ハイフン有)はfull formatでPPIDやSTIMEなどの詳細列を追加します。
SIGSTOPとSIGTSTPの違いは?
どちらも一時停止シグナルですが、SIGSTOP(19)は捕捉不能で必ず停止、SIGTSTP(20)は捕捉可能で端末のCtrl+Zが送るシグナルです。いずれもSIGCONTで再開できます。
nohupとscreen/tmuxはどう使い分ける?
nohupはSIGHUPを無視させるだけで単発の長時間ジョブ向き。screen/tmuxは端末多重化ツールで、デタッチして別端末からアタッチし直せます。対話的な作業を継続したいならscreen/tmux。
ps ax | grep nameが1件多く出る理由は?
grepコマンド自体が動作中のプロセスとしてリストに含まれ、それがnameにマッチしてしまうためです。pgrep nameかps -C nameを使えば自己マッチは起きません。
9. まとめ
psはUNIX形式(ハイフン有)とBSD形式(ハイフン無)が混在。-f=full、f=forest、-l/l=long(PPID/NI付き)、u=ユーザ向け整形、-u USER=フィルタ- ツリー表示は
pstreeまたはps f。詳細列はps -f - リアルタイム監視は
top(デフォルト3秒更新)、稼働時間とload averageはuptime/w/top、メモリ/スワップはfree - 名前→PIDは
pgrep(-u ユーザで絞れる)。ps|grepの自己マッチはpgrepかps -Cで回避 - ジョブ制御:行末
&で背景起動、Ctrl+Zで一時停止(SIGTSTP)、fgで前景復帰、bgで背景再開、jobsで一覧(そのシェル内のみ) fgのジョブ指定は%N/N/%文字列/%N単独。fg 文字列(%なし)は不可- ログアウト耐性は
nohup コマンド > file &。対話作業の継続はscreen/tmux(デタッチ・アタッチ) - シグナル: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 模擬問題ポータルから他の分野にも挑戦できます。
おすすめの教材
関連記事
📚 LinuC Level1 完全攻略マップへ戻る
全39サブ項目のシラバス準拠マップから他の記事を探せます




コメント