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 接続で認証失敗エラーが発生する場合の分析と解決方法

推薦する

MySQL データベースのステートメント ワイルドカード ファジー クエリの概要

MySQL エラー: パラメータ インデックスが範囲外です (1 > パラメータ数、つまり 0...

vue3 のさまざまな構文形式を比較したサンプルコード

デフォルトのテンプレートメソッドはvue2に似ており、コンポーネント内のセットアップ関数を使用します...

IE で ClearType をオンにした後の透明フォントの問題の解決方法

IE で ClearType をオンにした後に発生する透明フォントの問題を解決するには、透明要素に背...

Mysql の主キー インデックスと非主キー インデックスの違いについて簡単に説明します。

目次インデックスとは何か主キーインデックスと通常のインデックスの違いインデックスにはどのデータ構造が...

HTML タグのカスタム属性に関する質問

以前の開発では、クラス、名前などの HTML のデフォルト属性を使用していました。 Huawei社の...

VueのVuexの4つの補助機能について

目次1. 補助機能2. 例1. mapState と mapGetters 2. mapMutati...

MySQL サービスを起動できない問題の解決策を含む MySQL 5.7.17 インストール チュートリアル

.net 開発に関しては、Microsoft の SQL Server データベースに精通しており、...

DockerはCMDまたはENTRYPOINTコマンドを使用して複数のサービスを同時に起動します

要件: Celery は Django に導入されています。Django プロジェクトを開始するとき...

ウェブ開発におけるクロスドメインの理由に対する複数のソリューション

目次クロスドメインの理由JSONP Nginxソリューションバックエンドソリューションクロスドメイン...

セマンティック HTML タグの紹介

ここ数年、ウェブサイト開発では DIV+CSS が非常に人気があり、当時は大きな騒動を引き起こしまし...

MySQL 5.7.13 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、参考までにMySQL 5.7.13 winx64のインストールと設定方法のグラフィック...

Nginx リバース プロキシ springboot jar パッケージ プロセス分析

Springboot プロジェクトをサーバーにデプロイする方法としては、war パッケージにパッケー...

MySQLの文字列インターセプト関連関数の概要

この記事では、MySQL の文字列インターセプト関連の機能を紹介します。具体的な内容は以下のとおりで...

小さなアイコンのフロントエンド処理ソリューションのグラフィカルな説明

序文この記事を始める前に、複数選択の質問をしてみましょう。フロントエンド開発でビルド ツールを使用す...

CSSポジショニングによる階層関係の問題の詳細な説明

絶対、相対、固定位置の位置決めabsolue: 絶対配置。上、下、左、右を使用して、配置先の親要素に...