変更要約: 初版(主題1.01・副主題1.01.1〜1.01.5に対応)
1.4プロセスの生成、監視、終了
基本的なプロセス管理を学びます。ジョブのフォアグラウンド/バックグラウンド実行(&・bg・fg・jobs)、ログアウト後も実行を続ける nohup・screen・tmux、監視コマンド top・ps・pstree・uptime・pgrep、シグナル送信(kill・pkill・killall)を押さえます。
長時間かかる処理を走らせながら別の作業をする、暴走したプロセスを止める、負荷の原因を特定する — サーバー運用の日常はプロセス管理の連続です。シェルのジョブ制御とシグナル、監視コマンドの使い分けを身につけます。
1.4.1ジョブ制御とログアウト後の継続
- コマンド末尾の & でバックグラウンド起動。Ctrl+Z で一時停止 → bg でバックグラウンド再開・fg でフォアグラウンドへ戻す。jobs で一覧。
- nohup=ログアウト(端末切断=SIGHUP)後もコマンドを実行し続けさせる。
nohup 長い処理 &が定型。 - screen・tmux=仮想端末(ターミナルマルチプレクサ)。セッションを保持したままデタッチ/再アタッチでき、SSH が切れても作業が残る。
1.4.2監視とシグナルによる終了
- 監視=top(リアルタイムの CPU/メモリ上位)・ps(スナップショット。
ps auxが定番)・pstree(親子関係をツリー表示)・uptime(稼働時間とロードアベレージ)。 - pgrep=名前などの条件でプロセス ID を検索(
pgrep -u user01 nginx)。 - 終了=kill(PID 指定)・pkill(名前などの条件)・killall(名前完全一致)。既定は SIGTERM(15・穏当な終了要求)、応じない場合の最終手段が SIGKILL(9・強制終了)。SIGHUP(1)は端末切断/設定再読込に使われる。
「ログアウト後も続行=nohup(または screen/tmux)」「一時停止からバックグラウンド再開=Ctrl+Z→bg」「まず SIGTERM・ダメなら SIGKILL」「名前で探す=pgrep/pkill・PID で送る=kill」 が定番です。kill -9 をいきなり使うのは正解になりにくい(後始末が走らない)ことも覚えておきましょう。
典型シナリオで通しましょう。ビルドのような長い処理は nohup make all > build.log & で始めれば、SSH が切れても続行します。もっと柔軟にするなら tmux でセッションを開き、Ctrl+b d でデタッチ→後から tmux attach で再開します。エディタ作業中に Ctrl+Z で抜けてしまったジョブは jobs で番号を確認し、fg %1 で戻すか bg %1 で裏に回します。負荷調査は uptime でロードアベレージの傾向を見て、top で CPU/メモリ上位を特定し、pstree で「どの親から生えたか」を確認する、という流れが定石です。止めるときは pgrep -f app で PID を確かめてから kill <PID>(SIGTERM)→ 応じなければ kill -9 <PID>(SIGKILL)と段階を踏みます。killall は名前が完全一致するプロセス全部に送る点に注意(意図しない同名プロセスも巻き込む)。
| やりたいこと | 使うもの | 備考 |
|---|---|---|
| ログアウト後も実行継続 | nohup / screen / tmux | screen/tmux は再アタッチ可 |
| 一時停止→裏で再開 | Ctrl+Z → bg | fg で前面へ戻す |
| 負荷の全体像 | uptime / top | ロードアベレージ→上位プロセス |
| 穏当に停止→強制終了 | kill(SIGTERM) → kill -9(SIGKILL) | いきなり -9 は避ける |
ひっかけ: 「kill はプロセス名を指定して終了させる」は誤りです。kill は PID を指定します(名前で指定するのは pkill/killall)。また「SIGKILL(9)はプロセスに後始末の機会を与える」も誤り=SIGKILL は捕捉不可能で即時終了、後始末(クリーンアップ)が走るのは SIGTERM の方です。
1.4.3この節のまとめ
- ジョブ制御=& / Ctrl+Z / bg / fg / jobs。ログアウト耐性は nohup・screen・tmux
- 監視=top/ps/pstree/uptime/pgrep。終了は SIGTERM→SIGKILL の段階、名前指定は pkill/killall
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. SSH 接続が切れても実行し続けてほしいバッチ処理を起動したい。適切なコマンドは?
Q2. エディタ作業中に Ctrl+Z を押してしまい、ジョブが停止した。このジョブをバックグラウンドで実行再開させるコマンドは?
Q3. 応答しなくなったプロセス(PID 4321)を終了させたい。最初に試みるべき操作として適切なのはどれ?

