実行中のプログラムの出力を/ dev / nullにリダイレクトする方法


19

プログラムの出力を抑制するために/dev/null、たとえばからすべてのエラーと警告メッセージを非表示にするためにリダイレクトできることを知っています。このようにプログラムを起動できます。

chromium-browser 2> /dev/null &

ただし、エラーメッセージを忘れてタイプした場合

chromium-browser &

(コマンドの途中に表示される場合は非常に迷惑です)アプリケーションを停止して適切に再起動する以外、何をすべきかわかりません。

アプリケーションを再起動せずにエラー出力を何らかの方法でリダイレクトできますか?

回答:


8

nohupを使用してブラウザを起動し、次の方法でターミナルウィンドウを閉じることもできます。

nohup chromium-browser &

これにより、ブラウザが起動し、コンソールから切り離され、静かに閉じることができます。


2
入力することを覚えておく必要があるという事実を除き、それは受け入れられますnohup
-phunehehe

5
@phu少なくともzshではsetopt nohup、あなたは自分自身.zshrcを入れることができ、それはあなたが実行するすべてのものをnohupします。他のシェルについては
わかり

はい、素晴らしい、私はこのようにそれが好きです!
プネヘヘ

3
または、エイリアスを作成することもできます...エイリアスクロム= nohupクロム
パブロオルモスデアギレラC.

22

これは、ここに答えた:ここvladr。答えは(引用)です:

  • gdbを使用して問題のプロセスにアタッチし、次を実行します。
  • p dup2(open( "/ dev / null"、0)、1)(stdoutリダイレクト用)
  • p dup2(open( "/ dev / null"、0)、2)(stderrリダイレクト用)
  • 切り離す
  • 終了する

私は次のスクリプトでそれを試しました:

[最初のコメントの後の編集:]

10#をスリープさせて、プロセスにアタッチする時間を確保します
if ["$ sonorfather" == "father"]#無限再帰を避ける 
それから 
   sonorfather = son ./test& 
fi 

本当の間に 
行う 
   echo "stdout $ sonorfather" 
   echo "stderr $ sonorfather">&2 
   寝る1 
やった 

sonプロセスが作成される前にstderr出力を無効にしました。出力は次のとおりです。

stdout father 
標準的な息子 
stdout father 
標準的な息子 
[等々...]。 

これがあなたの質問に答えることを願っています:息子プロセスstderrもリダイレクトされました。


3
それは非常に良かったのですが、とにかく解決するために、各ブラウザタブに新しいプロセスを生成するため、クロムに問題があるかもしれませんか?
プネヘヘ

あなたに答えるために私の投稿を編集しました。
マイクパーディー

子プロセスが作成される前に出力をリダイレクトする必要があるように見えますか?知識に感謝しますが、複雑さに関しては私がちょうど行きますnohup:)
phunehehe

技術的には、これはの重複ファイル記述子をリークします/dev/nullが、実際には何にも大きな影響はありません。
ケビン

6

chromium-browser代わりに実行するためのエイリアスを設定することもできますchromium-browser 2> /dev/null

たとえば、bashを使用している場合、/ home / username / .bashrcを編集して次の行を追加します。

chromium-browser='chromium-browser 2> /dev/null'

またはそれ以上

chrome='chromium-browser 2> /dev/null'

いくつかのキーストロークを保存します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.