この問題の根本はLinuxのプロセスとターミナルセッションの関係にある。SSH接続が切れるとHUPシグナルが送られ、セッションに紐付いたプロセスがすべて終了してしまう。
これを防ぐために使うのが
nohup・bg・disownだ。それぞれ仕組みが異なり、状況に応じた使い分けが重要になる。本記事で3つのコマンドの違いと使い方を体系的に整理しよう。
【この記事でわかること】
・nohup・bg・disown それぞれの仕組みと使い分け
・SSH切断後もプロセスを継続させる方法
・バックグラウンド実行とジョブ管理の基本
・出力のリダイレクト先の管理方法
・nohup・bg・disown それぞれの仕組みと使い分け
・SSH切断後もプロセスを継続させる方法
・バックグラウンド実行とジョブ管理の基本
・出力のリダイレクト先の管理方法
「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 /
詳細はこちら
プロセスとHUPシグナルの関係
SSH接続が切れると、そのセッションに属するすべてのプロセスにSIGHUP(ハングアップシグナル)が送られる。多くのプロセスはSIGHUPを受け取ると終了する。これが「SSH切断 → 処理が止まる」という現象の原因だ。
nohup を使う方法
nohupはコマンドの前に付けて実行することで、HUPシグナルを無視してプロセスを継続させる。[pakira@Tiger ~]$ nohup コマンド名 &
&でバックグラウンド実行にする。標準出力は自動的にnohup.outに書き出される。[pakira@Tiger ~]$ nohup ./batch.sh > /var/log/batch.log 2>&1 & [1] 12345
bg コマンドを使う方法
すでにフォアグラウンドで実行中のコマンドを途中からバックグラウンドに移動させるには、
Ctrl+Zでサスペンド(一時停止)してからbgコマンドを使う。[pakira@Tiger ~]$ ./long_process.sh ^Z [1]+ Stopped ./long_process.sh [pakira@Tiger ~]$ bg %1 [1]+ ./long_process.sh &
bgだけではHUP対策にならない。SSH切断時に止まる点は変わらないため、disownと組み合わせる必要がある。disown を使う方法
disownはジョブをシェルのジョブリストから外し、HUPシグナルが送られないようにするコマンドだ。bgでバックグラウンドにしたあとにdisownを実行することで、SSH切断後もプロセスを継続させられる。[pakira@Tiger ~]$ ./long_process.sh & [1] 12345 [pakira@Tiger ~]$ disown %1
3つの手法の比較
| 手法 | タイミング | HUP対策 | 出力管理 |
|---|---|---|---|
nohup コマンド & | 実行前 | あり | nohup.outまたは指定先 |
Ctrl+Z → bg → disown | 実行後 | あり | 端末に出力される場合あり |
コマンド &のみ | 実行前 | なし | 端末に出力される |
実務での使い分け
・長時間バッチ処理を最初からバックグラウンドで動かしたい →
nohup・途中で「あ、これ長くかかりそうだ」と気づいた →
Ctrl+Z → bg → disown・ターミナルを閉じても続けたい → どちらも
disownまたはnohupが必要まとめ
| コマンド例 | 動作 |
|---|---|
nohup コマンド & | HUP無視でバックグラウンド実行する |
bg %ジョブ番号 | サスペンド中のジョブをバックグラウンドで再開する |
disown %ジョブ番号 | ジョブをシェルリストから外してHUP対策をする |
SSH接続中の長時間処理は必ず
nohupかdisownを組み合わせて実行する習慣をつけよう。これだけで「接続切れで全部やり直し」という悲劇を防げる。
Linuxのプロセス管理をもっと体系的に学びたくないですか?
コマンドの断片を覚えるだけでは、本番環境のトラブルには対応できません。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
暗記不要・1時間後にはサーバーが動く
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
Linux無料マニュアル(図解60P)
名前とメールで30秒登録
- 次のページへ:killコマンドで使用できるkillシグナルを表示する(kill -l)
- 前のページへ:特定コマンドのプロセスをすべて終了する(killall)
- この記事の属するカテゴリ:Linuxtips・システム管理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます