Nohupは「電話を切らない」の略です。ログアウトした後でもプロセスを実行できるようにするのは非常に便利なコマンドです。
最も一般的な使用法の1つは、SSH接続を介して時間のかかるコマンドを実行することです。 SSHセッションがドロップする可能性があると思われる場合は、次のようにnohupを指定してコマンドを使用できます。
nohup your_command &
nohupコマンドとは何ですか?
Nohupはラッパーと見なすことができます。コマンドの前に nohupを付けます このように:
nohup COMMAND ARGS ....
Nohup の目的は、 SIGHUPを傍受して防止することです。 コマンドに到達することからの信号 。
コマンドの前に nohupを付ける場合 、入力は読み取り不可能なファイルからリダイレクトされます( nohup COMMAND )。簡単に言うと、 nohupでコマンドを呼び出さないでください そのコマンドに入力を送信する必要がある場合。 nohup コマンドの場合、無人で実行できる必要があります。
Nohup 最初に出力を。/nohup.outにリダイレクトしようとします または、 〜/ nohup.outに送信します 必要なら。次のように、出力をリダイレクトする場所を決定することもできます。
nohup COMMANDS >/path/to/output/file
nohupについて言うことはあまりありません 、オプションの長いリストはありません。 –ヘルプのみがあります および–バージョン 。
nohupコマンドの使用例
nohupを使用してスクリプトを実行するのはこれと同じくらい簡単です。
nohup ./nhp.sh
nohup プロセスをバックグラウンドにフォークしませんでした。 Nohup SIGHUPを傍受するためだけにあります 信号。コマンドが実行されたら、続行してターミナルを閉じることができます。プロセスが実行中であることを警告します。殺したいことを確認してください。
端末を閉じると、すべての子プロセスがSIGHUPシグナルを受信しました。 Nohupは、その信号が私のコマンドに到達するのを防ぎました。次の図は、端末がまだ実行されている間のコマンドに関するプロセス情報を示しています。
PPIDが表示されますか?これが親プロセスIDです。ターミナルを閉じるようにリクエストすると、PPIDのすべての子が SIGHUPを受け取りました。 信号。 Nohup その信号がスクリプトに到達するのを防ぎました。親プロセスが終了し、スクリプトが孤立しました。プロセスが孤立すると、自動的に1(systemdまたはinit)が親として割り当てられます。
ご覧のとおり、 nohupの使用法を示すことはそれほど難しくありません。 。非常に簡単なコマンド。次のように、バックグラウンドでプロセスをフォークできます:
nohup ./nhp.sh &
同様に、出力をどこにリダイレクトするかを決定することもできます:
nohup ./nhp.sh >/path/to/file &
Linuxシステムをシャットダウンまたは再起動すると、コマンドが強制終了されることに注意してください。シャットダウンまたは再起動を要求すると、すべてのプロセスが SIGTERMを受け取ります。 次にSIGKILL 。これらの信号は nohupによって傍受されません 。
SSH接続を介したNohup
nohupを学ぶとすぐに頭に浮かぶ使用法の1つ SSHを介してリモートコンピュータでプロセスを開始できるようにすることです。論理的には、 nohupでコマンドを実行します SSH接続からログオフしても、プロセスは引き続き実行されます。
nohup COMMAND &
一般的な問題の1つは、ログオフ中にSSHが「ハング」することがあることです。これは、SSHがバックグラウンドプロセスとの間のデータストリームの損失を拒否することが多いためです。その後、プロセスが終了するまで「ハング」します。
この問題は、多くの場合、3つのデータストリームすべてをリダイレクトすることで対処できます。
nohup COMMAND >./nohup.out 2>./nohup.err &
この簡単な記事がSSHセッションのより良い使用に役立つことを願っています。ご質問やご提案がございましたら、下にコメントを残してください。