Linux で nohup コマンドを使用する方法

PHPz
リリース: 2023-05-12 08:52:10
転載
3993 人が閲覧しました

nohup とは

#nohup は、Linux および Unix システムのコマンドであり、その機能は、ターミナルの終了時にプロセスがバックグラウンドで実行を継続できるようにすることです。正式名称は「no Hang up」、つまり「電話を切らない」という意味です。 nohup コマンドを使用すると、ターミナルを終了するか SSH 接続を閉じた後でもコマンドの実行を続行できます。

nohup 構文ルール

nohup コマンドの基本構文は次のとおりです。

nohup COMMAND [ARGS ...] [> output-file 2> error-file] &
ログイン後にコピー

パラメータの意味は次のとおりです。

  • COMMAND: バックグラウンドで実行する必要があるコマンドまたはスクリプト。

  • ARGS: コマンドまたはスクリプトのパラメータ。

  • > 出力ファイル: 出力は指定されたファイルにリダイレクトされます。

  • 2> error-file: エラー メッセージは指定されたファイルにリダイレクトされます。

  • #&

    : コマンドをバックグラウンドで実行します。

  • nohup コマンドの実行プロセスは、次のステップに分かれています。

    nohup コマンドは、標準入力、標準出力、標準出力を変更します。現在のシェルのエラー ターミナルを閉じる信号による中断を避けるために、すべての出力は
  • /dev/null

    デバイスにリダイレクトされます。

  • nohup コマンドは、プロセスをバックグラウンドで実行し、プロセスの PID を端末に出力します。
  • プロセスの実行が開始され、標準出力と標準エラー出力が指定されたファイルにリダイレクトされます。
  • ユーザーはターミナルを終了するか、ターミナル ウィンドウを閉じることができますが、プロセスは引き続きバックグラウンドで実行されます。
  • nohup の使用方法

nohup コマンドの使用は非常に簡単で、上記の基本構文に従うだけです。 nohup コマンドの使用例をいくつか示します。

バックグラウンドでコマンドを実行する

バックグラウンドでコマンドを実行するには、コマンド ラインに次のコマンドを入力するだけです:

nohup COMMAND &
ログイン後にコピー

たとえば、バックグラウンドで Bash スクリプトを実行します。

nohup bash test.sh &
ログイン後にコピー

標準出力をファイルにリダイレクトします

nohup bash test.sh > stdout.txt &
ログイン後にコピー

標準エラー出力をファイルにリダイレクトします

nohup bash test.sh 2> stderr.txt &
ログイン後にコピー

標準出力を両方ともリダイレクトします出力と標準エラー出力 ファイルへのリダイレクト

1. 同じファイルへのリダイレクト

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

コマンドを使用して、現在のシェルのバックグラウンドで実行されているタスクのリスト (タスク番号、ステータス、コマンドなど) を表示します。 たとえば、バックグラウンドで

sleep 1000

コマンドを実行し、jobs コマンドを使用して次の情報を表示します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:bash;">$ jobs [1]+ Running nohup sleep 1000 &amp;</pre><div class="contentsignin">ログイン後にコピー</div></div> その中で、角括弧内はタスクを表します。数字、プラス記号またはマイナス記号はタスクの優先順位を示します。

Running

はタスクがバックグラウンドで実行されていることを示します。さらに、Stopped (停止)、Done (完了) など、他の状態も考えられます。

fg

コマンドを使用して、バックグラウンド タスクをフォアグラウンドに移動して実行を継続することもできます。例: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:bash;">$ fg %1</pre><div class="contentsignin">ログイン後にコピー</div></div>このコマンドは、タスク番号のタスクを移動します。 1 を最前面に移動し、実行を続行します。タスクを一時停止または再開したい場合は、

Ctrl-Z

キーを使用して、現在のシェルで 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>この時点で操作を再開したい場合は、

bg

コマンドを使用できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:bash;">$ bg %1 [1]+ nohup sleep 1000 &amp;</pre><div class="contentsignin">ログイン後にコピー</div></div>タスクを強制終了したい場合は、## を使用できます。 #kill

コマンド:

$ kill %1
[1]+  Terminated              nohup sleep 1000
ログイン後にコピー
すべてのバックグラウンド タスクを強制終了したいが、1 つずつ実行するのが面倒な場合は、disown

コマンドを使用して問題を解決できます。 :

$ disown -a
ログイン後にコピー
このコマンドはすべてのバックグラウンド タスクを強制終了できますが、プロンプトは表示されません。jobs

コマンドで確認できます。

以上がLinux で nohup コマンドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート