コマンドを実行中にターミナルが占有されて困った経験はありませんか?バックグラウンド実行を使いこなすと、複数の処理を並行して動かせるようになります。
フォアグラウンドとバックグラウンドの違い
フォアグラウンドはターミナルを占有してユーザーの入力を待つ実行モード、バックグラウンドはターミナルを解放したまま裏で動き続けるモードです。
基本操作:& / 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の全要点を確認できます。



コメント