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

推薦する

Nginx操作応答ヘッダー情報の実装

前提条件: ヘッダー情報操作をサポートするには、ngx_http_headers_module モジ...

Ubuntu 19.04 インストール チュートリアル (画像とテキストの手順)

1. 準備1.1 VMware 15 をダウンロードしてインストールするダウンロード リンク: h...

CSSを使用してファイルアップロードパターンを描画する

以下に示すように、あなたならどのようにそれを達成しますか: 通常、フォントアイコンを使用して中央にプ...

Web2.0製品と機能の簡単な紹介

<br />Web2.0とは何ですか? Web2.0にはソーシャルネットワーク製品とその...

HTMLでカスタムタグを使用する方法

カスタム タグは XML ファイルと HTML ファイルで自由に使用できますが、いくつか注意すべき点...

MySQLとOracleの誤解の詳細な説明

目次本質的な違いデータベースセキュリティ権限スキーマの移行パターンオブジェクトの類似性スキーマオブジ...

Docker-compose ワンクリックデプロイ gitlab 中国語版の方法手順

1. GitLabの紹介Gitlab 公式アドレス: https://about.gitlab.co...

Mysql SQL ステートメント演習 (50 問)

テーブル名とフィールド–1. 学生リスト学生 (s_id、s_name、s_birth、s_sex)...

MySQLインデックスの作成について知っておくべきこと

目次序文: 1. インデックスメソッドを作成する2. インデックスを作成するために必要な権限序文: ...

MySQLのロングトランザクションに関する深い理解

序文:この記事では主にMySQLのロングトランザクションに関する内容を紹介します。例えば、トランザク...

エラー 1862 (HY000): パスワードの有効期限が切れています。ログインするには、..... を使用してパスワードを変更する必要があります。

エラーメッセージ:エラー 1862 (HY000): パスワードの有効期限が切れています。ログインす...

MySQL で CURRENT_TIMESTAMP を使用する方法

目次CURRENT_TIMESTAMPの使用CURRENT_TIMESTAMPを使用したタイムスタン...

LinuxにComposerをインストールする方法

1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...

フレックスインサイドボタンの垂直方向の中央揃えが中央揃えにならない問題の解決方法

問題の説明ボタンのスタイルはアイコン + テキストです。フレックス レイアウトを使用して垂直方向に中...

docker pullがリセットされる問題を解決する

この記事では、docker pull がリセットされる問題を解決する方法を紹介し、皆さんと共有します...