nohup /dev/null 2>&1 の使い方の詳しい説明

nohup /dev/null 2>&1 の使い方の詳しい説明

nohup コマンド: プロセスを実行しており、アカウントからログアウトしてもプロセスが終了しないと思われる場合は、nohup コマンドを使用できます。このコマンドは、アカウントからログアウトしたり、ターミナルを閉じたりした後も、対応するプロセスを実行し続けます。 nohup は電話を切らないことを意味します。

このコマンドの一般的な形式は次のとおりです: nohup command &

ls xxx 1>out.txt 2>&1
nohup /mnt/Nand3/H2000G >/dev/null 2>&1 &

& 1 は、より正確にはファイル記述子 1 であり、通常は STDOUT_FILENO を参照します。この操作は、実際には dup2(2) 呼び出しです。標準出力を all_result に出力し、次に標準出力をファイル記述子 2 (STDERR_FILENO) にコピーします。その結果、ファイル記述子 1 と 2 は同じファイル テーブル エントリを指すか、エラー出力がマージされます。0 はキーボード入力、1 は画面出力、2 はエラー出力を表します。標準エラーは標準出力にリダイレクトされ、/DEV/NULL にスローされます。簡単に言えば、すべての標準出力と標準エラーをゴミ箱に捨てることを意味します。

コマンド >out.file 2>&1 &

command >out.file は、command の出力を out.file ファイルにリダイレクトします。つまり、出力内容は画面に印刷されず、out.file ファイルに出力されます。 2>&1 は標準エラーを標準出力にリダイレクトします。ここでの標準出力は out.file ファイルにリダイレクトされています。つまり、標準エラーも out.file ファイルに出力されます。最後の & により、コマンドはバックグラウンドで実行されます。

2>1 の意味を考えてみましょう。2 と > の組み合わせはエラーのリダイレクトを意味し、1 はエラーが標準出力ではなくファイル 1 にリダイレクトされることを意味します。
2>&1 に変更します。& と 1 の組み合わせは標準出力を表し、エラーは標準出力にリダイレクトされます。

使用できます
ls 2>1 を実行してテストします。ファイル 2 が存在しないというエラーは報告されませんが、空のファイル 1 が出力されます。
ls xxx 2>1 テスト、ファイル xxx が存在しないというエラーが 1 に出力されます。
ls xxx 2>&1 テストでは、ファイル 1 は生成されませんが、エラーが標準出力に実行されます。
ls xxx >out.txt 2>&1 ですが、実際には ls xxx 1>out.txt 2>&1 に変更できます。リダイレクト シンボル > はデフォルトで 1 に設定され、エラーと出力の両方が out.txt に転送されます。

なぜ最後に 2>&1 を書く必要があるのでしょうか?

コマンド > ファイル 2>&1

まず、コマンド > file は標準出力を file にリダイレクトし、2>&1 は標準出力をコピーする標準エラー、つまりこれも file にリダイレクトされます。最終結果は、標準出力とエラーの両方が file にリダイレクトされることです。

コマンド 2>&1 >ファイル 

2>&1 標準エラーは標準出力の動作をコピーしますが、標準出力は端末内に残ります。 >file 出力はファイルにリダイレクトされますが、標準エラーは端末に残ります。

strace を使用すると次のことがわかります:

1. コマンド > ファイル 2>&1
このコマンドでリダイレクトを実装するための主要なシステム コール シーケンスは次のとおりです。

オープン(ファイル) == 3 
重複2(3,1) 
重複2(1,2)

2. コマンド 2>&1 >ファイル
このコマンドでリダイレクトを実装するための主要なシステム コール シーケンスは次のとおりです。

重複2(1,2) 
オープン(ファイル) == 3 
重複2(3,1) 

なぜ /dev/null 2>&1 を使用するのでしょうか? このコマンドは、すべての標準出力とエラー出力を /dev/null にリダイレクトする、つまり、生成されたすべての情報を破棄することを意味します。command > file 2>file と command > file 2>&1 の違いを説明します。

まず、コマンド > ファイル 2 > ファイル は、コマンドによって生成された標準出力情報とエラー出力情報をファイルに送信することを意味します。このように、stdout と stderr は直接ファイルに送信され、ファイルは 2 回開かれるため、stdout と stderr は互いに上書きされます。これは、FD1 と FD2 を使用してファイルのパイプを同時に占有することと同じです。

コマンド >file 2>&1 は stdout を file に直接送信し、stderr は FD1 パイプを継承して file に送信されます。この時点では、file は 1 回だけ開かれ、stdout と stderr の内容を含む 1 つのパイプ FD1 のみが使用されます。

IO 効率の観点から見ると、最初のコマンドの効率は 2 番目のコマンドの効率よりも低いため、シェル スクリプトを作成するときは、コマンド > ファイル 2>&1 を使用することが多いです。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Linux のバックグラウンドで & と nohup を使用する方法
  • Linux でバックグラウンドで実行中のプログラムを表示して終了する方法
  • Linux シェルの 2>&1 の意味を深く理解する (インターネット上で最も包括的なので、読めば理解できます)
  • Linux nohup はプログラムをバックグラウンドで実行し、表示します (nohup と &)
  • Linux で nohup ログ出力が大きすぎる問題の解決方法の詳細な説明
  • Linux &、nohup と Systemctl の使用
  • Linux でバックグラウンド タスクを実行するために nohup と screen を使用する例と違いの簡単な分析
  • Linux nohup と tail-f の使い方
  • Python Nohup Linux バックグラウンド実行出力の問題を解決する
  • PHP デーモン プロセスと Linux コマンド nohup を組み合わせて、1 秒に 1 回のタスク実行を実装します。

<<:  WeChatアプレットがスネークゲームを実装

>>:  MySQL 接続で認証失敗エラーが発生する場合の分析と解決方法

推薦する

JS クロスドメイン ソリューション React 構成 リバース プロキシ

クロスドメインソリューションjsonp (get をシミュレート) CORS (クロスオリジンリソー...

CSS の無効な行の高さ設定の問題の解決策

CSS の無効な行の高さ設定についてまず、次のコード文字列を記述します。 <!DOCTYPE ...

MySQL のグループ分けの例

mysql のような php switch case ステートメント。 xxフィールドを選択、ケース...

DockerコンテナにRedisをデプロイする手順の紹介

目次1 つの Redis 設定ファイル2 Dockerコマンドの開始3 docker-compose...

MySQL データベースで UTF-8 エンコードを設定する方法

/etc/my.cnf または /etc/mysql/my.cnf ファイルを変更する [クライアン...

MySQL テーブル削除操作の実装 (delete、truncate、drop の違い)

この記事では主に、MySQL でテーブルを削除する 3 つの操作、つまり delete ステートメン...

Mysql が CPU を過剰に占有する場合の最適化方法 (必読)

Mysql が CPU を占有しすぎる場合、どこから最適化を開始すればよいでしょうか? CPU 使...

リモートDockerを使用した統合テスト環境の構築手順

需要背景チームには統合テストが必要であり、そのためには、mysql や rabbitmq などのミド...

CentOS7でルートパスワードをリセットする方法

レンガを移動するプロセスでは、さまざまな環境および構成の問題があり、毎回異なるエラーが発生します。 ...

ウェブページ作成に役立つコード

<br />ホームページの右側にあるスクロールバーを削除するにはどうすればよいですか? ...

EXPLAIN コマンドの詳細な説明と MySQL での使用方法

1. シナリオの説明: 同僚から MySQL で explain を使用する方法を教わったので、返さ...

VMware 仮想マシン ブリッジ モードでインターネットにアクセスできない問題を解決する方法

ステップ1: ローカルイーサネットプロパティをチェックして、VMwareブリッジプロトコルがインスト...

この記事では、VUE の複数の DIV とボタン バインディングの Enter イベントを実装する方法を説明します。

現在、OK ボタンをクリックしたときやキーボードの Enter キーを押したときに操作を実行するとい...

XHTML言語のデフォルトCSSスタイル

html、アドレス、引用ブロック、本文、dd、div、 dl、dt、フィールドセット、フォーム、フレ...

HTML いくつかの特別な分割線効果

1. 基本ライン 2. 特殊効果(効果は独立しておらず、互いに組み合わせることができます) 1. 両...