#nohup は、Linux および Unix システムのコマンドであり、その機能は、ターミナルの終了時にプロセスがバックグラウンドで実行を継続できるようにすることです。正式名称は「no Hang up」、つまり「電話を切らない」という意味です。
nohup コマンドを使用すると、ターミナルを終了するか SSH 接続を閉じた後でもコマンドの実行を続行できます。
nohup COMMAND [ARGS ...] [> output-file 2> error-file] &
COMMAND: バックグラウンドで実行する必要があるコマンドまたはスクリプト。
ARGS: コマンドまたはスクリプトのパラメータ。
> 出力ファイル: 出力は指定されたファイルにリダイレクトされます。
2> error-file: エラー メッセージは指定されたファイルにリダイレクトされます。
: コマンドをバックグラウンドで実行します。
デバイスにリダイレクトされます。
バックグラウンドでコマンドを実行する
nohup COMMAND &
たとえば、バックグラウンドで Bash スクリプトを実行します。
nohup bash test.sh &
標準出力をファイルにリダイレクトします
nohup bash test.sh > stdout.txt &
nohup bash test.sh 2> stderr.txt &
nohup bash test.sh > output.txt 2>&1 &
2. 別のファイルへのリダイレクト
nohup bash test.sh > stdout.txt 2> stderr.txt &
3. より複雑な例は、リダイレクト基準 入力 (stdin):
nohup ./myprogram > foo.out 2> foo.err < /dev/null &
追加の
があります。これは、標準入力を/dev/null
にリダイレクトすることを意味します。プログラムが標準入力からデータを読み取らないようにします。
これは実際的な問題を解決するためのものです。SSH セッションは、バックグラウンド ジョブと対話しているデータを失いたくないため、ログアウト (またはハング) を拒否することがよくあります。この問題が発生した場合は、上記のコマンドを 3 回リダイレクトすることで解決できます。 nohup バックグラウンド プロセス管理
jobs コマンドを使用して、現在のシェルのバックグラウンドで実行されているタスクのリスト (タスク番号、ステータス、コマンドなど) を表示します。 たとえば、バックグラウンドで
コマンドを実行し、jobs
コマンドを使用して次の情報を表示します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:bash;">$ jobs
[1]+ Running nohup sleep 1000 &</pre><div class="contentsignin">ログイン後にコピー</div></div>
その中で、角括弧内はタスクを表します。数字、プラス記号またはマイナス記号はタスクの優先順位を示します。
はタスクがバックグラウンドで実行されていることを示します。さらに、Stopped
(停止)、Done
(完了) など、他の状態も考えられます。
コマンドを使用して、バックグラウンド タスクをフォアグラウンドに移動して実行を継続することもできます。例: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:bash;">$ fg %1</pre><div class="contentsignin">ログイン後にコピー</div></div>
このコマンドは、タスク番号のタスクを移動します。 1 を最前面に移動し、実行を続行します。タスクを一時停止または再開したい場合は、
キーを使用して、現在のシェルで SIGTSTP
シグナルを送信します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:bash;">$ fg %1
nohup sleep 1000
^Z
[1]+ Stopped nohup sleep 1000</pre><div class="contentsignin">ログイン後にコピー</div></div>
この時点で操作を再開したい場合は、
コマンドを使用できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:bash;">$ bg %1
[1]+ nohup sleep 1000 &</pre><div class="contentsignin">ログイン後にコピー</div></div>
タスクを強制終了したい場合は、## を使用できます。 #kill
$ kill %1 [1]+ Terminated nohup sleep 1000
すべてのバックグラウンド タスクを強制終了したいが、1 つずつ実行するのが面倒な場合は、
disown コマンドを使用して問題を解決できます。 : $ disown -a
このコマンドはすべてのバックグラウンド タスクを強制終了できますが、プロンプトは表示されません。
jobs コマンドで確認できます。 以上がLinux で nohup コマンドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。