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

推薦する

HTML onfocus gain focus および onblur lose focus イベントの詳細な説明

HTML onfocus イベント属性定義と使用法onfocus 属性は、要素がフォーカスを受け取っ...

HTMLデータ送信投稿_PowerNode Java Academy

HTTP/1.1 プロトコルで指定されている HTTP リクエスト メソッドには、OPTIONS、...

HTML のテキストエリア タグ

<textarea></textarea> は、複数行を入力できるテキスト ...

Dockerfile に基づいて Tomcat イメージを構築する方法

Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...

JSパッケージオブジェクトに関する簡単な説明

目次概要意味インスタンスメソッドプリミティブ型とインスタンスオブジェクト間の自動変換カスタムメソッド...

CSS変換ページめくりアニメーションレコードの実装

ページめくりの問題のシナリオBとCは同じページ(表と裏)にありますページをめくって A をカバーした...

Vue プロジェクトでの支払い機能の実装 (WeChat 支払いと Alipay 支払い)

目次プロジェクトにおける一般的な支払い方法Alipay決済微信ペイプロジェクトにおける一般的な支払い...

MySQL 5.7.20\5.7.21 無料インストール版のインストールと設定のチュートリアル

参考までに、mysql 5.7.20 / 5.7.21 をダウンロード、インストール、構成します。具...

分散監視システムZabbixはSNMPとJMXチャネルを使用してデータを収集します

前回の記事では、Zabbix のパッシブ、アクティブ、Web 監視に関するトピックについて学習しまし...

入力選択スタイルを変更する CSS 疑似クラスのサンプルコード

注: この表はW3Schoolチュートリアルから引用したものです疑似要素の分類と機能: 入力選択スタ...

Docker+Nginx を使ってシングルページアプリケーションをデプロイする

開発から導入まで自分で行うシングルページアプリケーションを開発する場合、ビルドを実行した後 npm ...

MySQLの使い方の詳細な説明

目次1. はじめに2. 本文2.1 Where句の位置2.2 演算子2.3 NULL値1. はじめに...

nginxとlvsのメリットとデメリット、そして適切な使用環境

まず最初に、ロード バランシングとは何かについて説明します。ロード バランシングとは、リクエストの内...

CSS3で蓮の花が咲くアニメーション効果を実現

まずは効果を見てみましょう:この効果は非常に華やかに見えますが、原理は複雑ではありません。1 枚の花...

MySQL マルチテーブル結合入門チュートリアル

接続は、実際の外部キー(人工的に作成された 2 つのテーブル間の対応関係を指します。対照的に、FOR...