Linuxプロセス管理 実践編:止める以外の選択肢と、安全な複数プロセス操作

プロセス管理実践 - ジョブコントロールと安全な操作

基礎編で学んだ「見る → 確認する → 止める」の判断の型を前提に、この実践編では次を学びます。

  • 止める以外の選択肢(バックグラウンド、nice)
  • 複数プロセスをまとめて操作(pkill、killall)
  • エラーへの対処(Operation not permitted など)

目次

  1. 先に結論:実践の判断の型
  2. 止めずに逃がす:バックグラウンド実行
  3. ジョブコントロール:Ctrl+Z / bg / fg
  4. 複数プロセス操作:pkill / killall
  5. 止めずに落ち着かせる:nice / renice
  6. エラー対処:Operation not permitted
  7. 実務シナリオ:よくある場面と対応

先に結論:実践の判断の型

プロセスが邪魔なとき、まず考える順番

  1. バックグラウンドに逃がせないか?(端末を使いたいだけなら)
  2. 優先度を下げられないか?(CPUが重いだけなら)
  3. 止める必要があるなら、まずTERMから

「止める」は選択肢の一つに過ぎません。

止めずに逃がす:バックグラウンド実行

最初からバックグラウンドで起動

$ long_command &

コマンドの最後に & を付けると、バックグラウンドで実行されます。

SSH切断後も継続させたい場合

$ nohup long_command &

nohup を付けると、ログアウト後もプロセスが継続します。

▶ nohupの出力先について

nohupを使うと、標準出力は自動的に nohup.out に書き込まれます。

# 出力先を明示的に指定する場合
$ nohup long_command > output.log 2>&1 &

これにより、標準出力と標準エラー出力の両方が output.log に記録されます。

ジョブコントロール:Ctrl+Z / bg / fg

「実行中のコマンドを一旦止めて、端末を使いたい」という場面で使います。

基本の流れ

# 1. 実行中のコマンドを一時停止
Ctrl+Z

# 2. バックグラウンドで再開
$ bg

# 3. または、フォアグラウンドに戻す
$ fg

複数ジョブがある場合

# ジョブ一覧を確認
$ jobs
[1]-  Stopped     vim file.txt
[2]+  Running     ./script.sh &

# ジョブ番号を指定して操作
$ fg %1    # vim をフォアグラウンドに

判断ポイント

  • Ctrl+Z = 一時停止(プロセスは生きている)
  • Ctrl+C = 終了を試みる(SIGINT送信)

「端末を取り戻したい」だけなら Ctrl+Z → bg で止めずに済みます。

複数プロセス操作:pkill / killall

同じ名前のプロセスが複数ある場合、PIDを一つずつ指定するのは大変です。

pkill:名前でまとめて操作

# python という名前のプロセスすべてに SIGTERM
$ pkill python

# 強制終了(最終手段)
$ pkill -9 python

killall:同様に名前で操作

$ killall python

⚠️ 注意:名前の一致範囲

  • pkill:部分一致(python → python3 も対象)
  • killall:完全一致

意図しないプロセスを止めないよう、事前に pgrep で確認することを推奨します。

# 対象を事前確認
$ pgrep -l python
1234 python3
5678 python

止めずに落ち着かせる:nice / renice

CPUが重いプロセスを「止める」のではなく、優先度を下げて他の処理を優先させる選択肢です。

nice:起動時に優先度を指定

# 低優先度で実行(数値が大きいほど低優先度)
$ nice -n 10 ./heavy_script.sh

renice:実行中のプロセスの優先度を変更

# PID 1234 の優先度を下げる
$ renice +10 -p 1234

nice値の範囲

  • -20:最高優先度(root権限必要)
  • 0:デフォルト
  • +19:最低優先度

数値が小さいほど優先度が高いという点に注意してください。

▶ どんな場面で使う?

nice/renice が有効な場面

  • バックアップスクリプトを裏で実行中、他の作業を優先したい
  • ビルド処理が重いが、止めたくない
  • 夜間バッチの優先度を最初から低くしておきたい

止めるとやり直しになる処理では、優先度変更が有効です。

エラー対処:Operation not permitted

killやpkillで「Operation not permitted」が出る場合の対処です。

原因と対策

$ kill 1234
bash: kill: (1234) - Operation not permitted

このエラーが出る主な原因

  1. 他のユーザーのプロセスを止めようとしている
  2. システムプロセス(rootが起動)を止めようとしている

対策

# まず、プロセスの所有者を確認
$ ps aux | grep 1234

# 自分のプロセスでなければ sudo が必要
$ sudo kill 1234

⚠️ sudo を使う前に

root権限で止めるということは、システムに影響を与える可能性があるということです。
「なぜ自分のプロセスじゃないのか」を確認してから実行してください。

実務シナリオ:よくある場面と対応

シナリオ1:vimを開いたまま端末を使いたい

Ctrl+Z       # vim を一時停止
$ bg         # バックグラウンドへ(vim は停止状態のまま)
$ fg         # 作業後、vim に戻る

シナリオ2:pythonプロセスが複数暴走

# 1. 対象を確認
$ pgrep -l python
1234 python3
5678 python3

# 2. まとめて SIGTERM
$ pkill python

# 3. 残っていれば強制終了
$ pkill -9 python

シナリオ3:ビルドが重いが止めたくない

# ビルドプロセスのPIDを確認
$ pgrep -l make
1234 make

# 優先度を下げる
$ renice +15 -p 1234

シナリオ4:SSH切断後も実行を続けたい

# 最初から nohup で起動
$ nohup ./long_script.sh > log.txt 2>&1 &

# または、実行中のジョブを切り離す
$ disown %1

まとめ:実践の判断フロー

プロセスが邪魔なとき

  1. 端末を使いたいだけ → Ctrl+Z → bg
  2. CPUが重いだけ → renice で優先度を下げる
  3. 止める必要がある → kill(SIGTERM)
  4. それでも止まらない → kill -9(最終手段)

「止める」は最後の選択肢です。

📊 プロセス管理シリーズ全体

  1. 基礎編 - ps・top・killの判断の型
  2. 実践編(この記事) - ジョブコントロール、pkill、nice

📋 検証環境

本記事のコマンドは Ubuntu 24.04 LTS / bash 5.2 で動作確認済みです。