web-dev-qa-db-ja.com

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

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

chromium-browser 2> /dev/null &

ただし、エラーメッセージを忘れてタイプすると

chromium-browser &

(コマンドの途中に表示されると非常に煩わしいです)アプリケーションを停止して正しく再起動する以外に何をすべきかわかりません。

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

19
phunehehe

Nohupでブラウザを起動し、次のようにターミナルウィンドウを閉じることもできます。

Nohup chromium-browser &

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

8
Lito

これはここで答えられました: ここ によって vladr 。答えは(引用)です:

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

次のスクリプトで試してみました:

[最初のコメントの後のエディション:]

sleep 10#プロセスにアタッチする時間を確保できるように
 if ["$ sonorfather" == "father"]#無限再帰を回避
 then 
 sonorfather = son。/test&
 fi 
 
 while true 
 do 
 echo "stdout $ sonorfather" 
 echo "stderr $ sonorfather"> &2 
スリープ1 
完了

私は息子プロセスが作成される前にstderr出力を無効にしました、これが出力です:

 stdoutの父
 stdoutの息子
 stdoutの父
 stdoutの息子
 [など...]。 

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

22
Mike Perdide

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

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

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

またはそれ以上

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

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

6
user1433