質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

4回答

8028閲覧

/dev/nullについて

kinpirans

総合スコア16

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

1クリップ

投稿2015/05/08 09:15

初歩的な質問すみません。
今回、とある問題の解決策を探した所
「< /dev/null > /dev/null 2> /dev/null」を使用し、出力を捨てる事によって問題を解決できました。

ちなみにこれが実際に解決したfabricの処理です。
「run(nohup mono hello.exe < /dev/null > /dev/null 2> /dev/null &)」
こちらが、参考にしたサイトです。
http://treeapps.hatenablog.com/entry/2014/02/04/002323

/dev/nullは出力を捨てると言うのは、調べて分かったのですが、
この様に「< /dev/null > /dev/null 2> /dev/null」ここまでネストする意味が理解できません。
どなたかご教授お願いできないでしょうか?

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

それぞれ、
< /dev/null:標準入力(STDIN)を/dev/nullから入力(EOFになる)
> /dev/null:標準出力(STDOUT)を/dev/nullに出力
2> /dev/null:標準エラー出力(STDERR)を/dev/nullに出力
となっています。
ネストという訳ではありません。

投稿2015/05/08 10:46

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kinpirans

2015/05/10 15:48

非常に分かりやい回答ありがとうございます! それぞれ独立したコマンドとして考えれば良かったんですね>< すごく理解できました、ありがとうございます!!
guest

0

lang

1nohup mono hello.exe < /dev/null > /dev/null 2> /dev/null

nohup は実行するシェルから切り離されて,非同期に独立して動作する,ということです.
monoかhello.exeは,何かキーボードからの入力を受け付けるプログラムだったりしませんか?

そういうプログラムに対して < /dev/null としないと
nohupで独立して動作したまま,ずーっと入力待ちしてしまいます.

そこで,< /dev/null とすることで,入力が必要なプログラムの箇所を無事,
入力なしということで処理を継続できてプログラムの最後まで到達することができます.

dev/null 2> /dev/null は 通常のリダイレクト出力ですね.

nohup でシェルから切り離されてしまうので,
標準出力もエラー出力もターミナル画面上に出すことができません.なので,
nohup する場合は,こうやって出力を捨てるか,
lib さんのおっしゃるように,他のファイルに内容を書き出すようにするのがセオリーです.

投稿2015/05/08 12:38

katzC4ISR

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kinpirans

2015/05/10 15:52

今回使用していたhello.exeは入力は必要ない処理なので、「< /dev/nul」自体いらなかったんですね>< nohup の場合にファイルに出力する事はセオリーなんですね。 ググってみても、当たり前の用に書かれている記事ばかりだったので、ようやく合点がいきました! 非常に分かりやすい回答ありがとうございます!
guest

0

ベストアンサー

こちらのサイトを確認したところ、標準出力がされていない点が後々気になっていたようです。
そのため、よくサイトを拝見すると下記の記述が書かれていることがわかりました。

上記のように /dev/null など他のファイルを指定することにより、子プロセスが入出力ストリームの参照を持たないため、期待通りの実行結果となります。

他のファイル?
では下記のように出力先をファイルに変えてみるのはいかがでしょうか?
/dev/nullもファイルなので、ファイルに出す形に変えるということで・・・。

lang

1/etc/init.d/tomcat start < /dev/null > /tmp/redirect_output_`date '+%H%M%S'`.log 2> /tmp/redirect_error_`date '+%H%M%S'`.log'

投稿2015/05/08 12:15

lib

総合スコア446

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lib

2015/05/08 12:20

補足です。間にdateコマンドを入れていますが、日時つきファイル名をログファイルとして出すときに利用していたTipです。date '+%Y%m%d%H%M%S'でもいいですね。 この場合、YYYYMMDDHHMIDDの形を想定です・・・。
kinpirans

2015/05/10 15:54

/dev/nullもファイルなんですね! そこから理解できていなかったです>< 単純に捨てているだけかと思ってました。。。 コマンドの例が非常に分かりやすく理解しやすかったです。 ありがとうございます!
guest

0

こんな初歩的な質問に、みなさん非常に分かりやすく丁寧な回答ありがとうございました!
みなさんのおかげで正確に理解する事ができました。
みなさんベストアンサーにしたい位なのですが、今回はコマンド例を書いてくださったlibさんをベストアンサーにさせていただきました><

投稿2015/05/10 15:58

kinpirans

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問