2012-09-26 4 views
6

今日この問題に遭遇しました。 IISからプロセスを開始して標準出力とエラー出力をリダイレクトして、プロセスが終了したときにログを生成できるようにしました。私のマシンではすべてがうまく動いていましたが、私が出版したあまりよくありませんでした。リダイレクトされた出力が比較的大きいときにプロセスがハングアップしました

このプロセスはちょっとした間働いてから終了すると思われますが、それはできません。単にソケットのようなリソースを保持して応答を停止するだけです。しばらくして、私は問題の原因を特定することができました。生成されるログは大きすぎました。実行中のプロセスからConsole.WriteLineをコメントした後、すべてうまくいった。ちょうど私がプロセスを開始した方法を明確にするための

Process process = new Process(); 
process.StartInfo.FileName = path; 
process.StartInfo.Arguments = arguments; 
process.StartInfo.UseShellExecute = false; 
process.StartInfo.RedirectStandardOutput = true; 
process.StartInfo.RedirectStandardError = true; 
process.EnableRaisingEvents = true; 
process.Exited += Process_Exited; 
process.Start(); 

そして、どのように私はそれが終了します取り扱わ:

private static void Process_Exited(object sender, EventArgs e) 
{ 
    Process process = (Process)sender; 
    File.WriteAllText(path, process.StandardOutput.ReadToEnd() + 
    "\r\nEXCEPTIONS\r\n" + process.StandardError.ReadToEnd()); 
} 

私はすでにそれを修正する方法を知っているにもかかわらず、私はまだしたいのですが本当に何が起こったのか、そしてなぜそれが起こったのかを知ってください。私が望むほど大きなログを作成する方法がなければならないからです。

答えて

7

documentation for RedirectStandardOutputは、一つはStandardOutputとはStandardErrorの両方がリダイレクトされ、ストリームがされたときにときに発生するものをない記述が、二つの可能なデッドロックのシナリオ(どのように役に立つと非危険なクラスライブラリ?!のためということだ)

読み込みがいっぱいです。これはあなたの状況を完全に表すようです。

かなり厄介な状況ですが、完全なドキュメントを読んで、それが発生するのを避ける方法を説明しています。

+2

私はそれが本当に何が起こったと信じています!答えはドキュメントにありました。私のことは恥です。返信いただきありがとうございます! –

関連する問題