【ノーハップ】

nohup とは?

💡 ターミナルを閉じても「止まらないで!」と処理を守ってくれるコマンド
📌 このページのポイント
nohup の効果:ターミナル切断後の動作 nohup なし ターミナル 処理実行中... 閉じる × HUPシグナル送信 強制終了 処理が途中で止まる nohup あり ターミナル 処理実行中... 閉じる × HUPシグナル → 無視 処理続行! nohup.outに出力 安心して帰れる
nohupあり・なしでのターミナル切断時の違い
ひよこ ひよこ

サーバーで長い処理を動かしてるとき、ターミナルを閉じたら止まっちゃうの?

ペンギン先生 ペンギン先生

そうなんだよ。ターミナルを閉じると、そこで動いてるプロセスにHUPシグナル(切断通知)が送られて、普通は終了しちゃうんだ。nohupを使うとこのシグナルを無視して処理を続けてくれるよ

ひよこ ひよこ

どうやって使うの?

ペンギン先生 ペンギン先生

「nohup コマンド &」が定番の使い方だよ。たとえば「nohup python train.py &」とすれば、機械学習のトレーニングをバックグラウンドで動かしつつ、ターミナルを閉じても安心なんだ

ひよこ ひよこ

出力はどこに行くの?

ペンギン先生 ペンギン先生

画面に表示できないから、自動的に「nohup.out」というファイルに出力が保存されるよ。「nohup コマンド > output.log 2>&1 &」みたいにリダイレクトで出力先を指定することもできるんだ

ひよこ ひよこ

最近はnohupの代わりになるものってあるの?

ペンギン先生 ペンギン先生

tmuxやscreenというターミナルマルチプレクサを使えば、セッション自体を維持できるから同じことができるよ。Dockerコンテナで動かすならコンテナ自体がプロセスを管理してくれる。ただ、サッと一発コマンドを切り離したいときはnohupが今でも一番手軽だね。systemdのサービスとして登録するのが正式だけど、ちょっとした運用ではnohupが現役だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「nohup」って出てきたら「ログアウトしても処理を止めないコマンド」と思えればだいたいOK!
📖 おまけ:英語の意味
「no hang up」 = 電話を切らない(切断しない)
💬 「no hang up(ハングアップしない)」の略だよ。電話を切っても(ターミナルを閉じても)処理が続くイメージだね
← 用語集にもどる