我正在使用c#和StandardoutputRedirect来获取字符串中我的进程的输出,但程序有时不提供任何输出的问题如何进程仍在等待输出我怎么能等待3秒如果没有输出继续程序??
这是我的代码
Process tcpdump = new Process();
tcpdump.StartInfo.FileName= "/usr/sbin/tcpdump";
tcpdump.StartInfo.CreateNoWindow = true;
tcpdump.StartInfo.Arguments = " -i en1 -c 10 -nn tcp and src host " + ip + " and port " + ports[i];
tcpdump.StartInfo.UseShellExecute = false;
tcpdump.StartInfo.RedirectStandardOutput = true;
tcpdump.Start();
tcpdump.WaitForExit(3000);
string tcpdump_output = tcpdump.StandardOutput.ReadToEnd(); // at this part the programs waits for an output
答案 0 :(得分:3)
你有tcpdump.WaitForExit(3000);
,它应该只让你的进程等待那么长时间,但你可能还想杀死它继续前进:
if (!tcpdump.WaitForExit(3000)) {
tcpdump.Kill();
}
此外,根据documentation,您应该在呼叫.StandardOutput.ReadToEnd()
之前致电WaitForExit()
,否则您可以输入死锁 - 您看起来就是这样。因此,请尝试将代码更新为:
string tcpdump_output = tcpdump.StandardOutput.ReadToEnd();
if (!tcpdump.WaitForExit(3000)) {
tcpdump.Kill();
}
答案 1 :(得分:0)
是否适合您,然后检查
if (tcpdump.EndOfStream)
{
// ...
}
在阅读结束之前?