Linuxプロセス管理 実践編:止める以外の選択肢と、安全な複数プロセス操作
基礎編で学んだ「見る → 確認する → 止める」の判断の型を前提に、この実践編では次を学びます。
- 止める以外の選択肢(バックグラウンド、nice)
- 複数プロセスをまとめて操作(pkill、killall)
- エラーへの対処(Operation not permitted など)
目次
先に結論:実践の判断の型
プロセスが邪魔なとき、まず考える順番
- バックグラウンドに逃がせないか?(端末を使いたいだけなら)
- 優先度を下げられないか?(CPUが重いだけなら)
- 止める必要があるなら、まず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
このエラーが出る主な原因
- 他のユーザーのプロセスを止めようとしている
- システムプロセス(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
まとめ:実践の判断フロー
プロセスが邪魔なとき
- 端末を使いたいだけ → Ctrl+Z → bg
- CPUが重いだけ → renice で優先度を下げる
- 止める必要がある → kill(SIGTERM)
- それでも止まらない → kill -9(最終手段)
「止める」は最後の選択肢です。
📊 プロセス管理シリーズ全体
- 基礎編 - ps・top・killの判断の型
- 実践編(この記事) - ジョブコントロール、pkill、nice
📋 検証環境
本記事のコマンドは Ubuntu 24.04 LTS / bash 5.2 で動作確認済みです。