Linuxサーバー管理

バックグラウンド実行・フォアグラウンド切り替え

Linuxサーバー管理
記事内に広告が含まれています。

コマンドを実行中にターミナルが占有されて困った経験はありませんか?バックグラウンド実行を使いこなすと、複数の処理を並行して動かせるようになります。

フォアグラウンドとバックグラウンドの違い

フォアグラウンドはターミナルを占有してユーザーの入力を待つ実行モード、バックグラウンドはターミナルを解放したまま裏で動き続けるモードです。

基本操作:& / Ctrl+Z / jobs / fg / bg

# コマンド末尾に & でバックグラウンド起動
$ ./backup.sh &
[1] 12345   # ジョブ番号とPIDが表示される

# 実行中のコマンドをバックグラウンドに送る
# Ctrl+Z でサスペンド(一時停止)
^Z
[1]+  Stopped    ./backup.sh

# サスペンドしたジョブをバックグラウンドで再開
$ bg %1

# バックグラウンドジョブ一覧を確認
$ jobs
[1]+  Running    ./backup.sh &
[2]-  Stopped    vim notes.txt

# バックグラウンドジョブをフォアグラウンドに戻す
$ fg %1

# ジョブをバックグラウンドで動かしたまま強制終了
$ kill %1

nohup:ターミナルを閉じても実行し続ける

nohup(no hang up)を使うと、SSH接続が切れてもプロセスが終了しません。ログアウト後も実行し続けたい処理に使います。

# nohup でバックグラウンド実行(出力はnohup.outに保存)
$ nohup ./longprocess.sh &

# 出力先を指定する
$ nohup ./longprocess.sh > /var/log/myprocess.log 2>&1 &

# PIDを確認してあとで管理
$ echo $!    # 直前のバックグラウンドプロセスのPID
$ ps aux | grep longprocess

disown:実行中のジョブをシェルから切り離す

# すでにバックグラウンドで動いているジョブをシェルから切り離す
$ ./longprocess.sh &
$ disown %1

# 全ジョブを切り離す
$ disown -a

# disown 後は jobs コマンドで表示されなくなる
# → ターミナルを閉じてもプロセスは続く

tmux/screen:セッション管理で本格的に運用する

本番環境の長時間処理には tmux が最も信頼性が高い方法です。

# tmux のインストール
$ sudo apt install tmux

# 新しいセッションを作成して名前をつける
$ tmux new -s mysession

# セッションをデタッチ(バックグラウンドに送る)
Ctrl+b → d

# セッション一覧を確認
$ tmux ls

# セッションに再接続
$ tmux attach -t mysession

# セッションを終了
$ tmux kill-session -t mysession

まとめ

  • &でバックグラウンド起動、Ctrl+Zでサスペンド、bg/fgで切り替え
  • jobsでジョブ一覧確認。kill %番号で終了
  • nohup コマンド &でSSH切断後も実行継続
  • disownで実行中のジョブをシェルから切り離す
  • 本番環境の長時間処理には tmux が最も確実

📋 Linuxサーバー運用・管理チェックリスト完全版でPhase 2の全要点を確認できます。

コメント

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