0

我正在使用 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 
4

2 回答 2

3

你有tcpdump.WaitForExit(3000);,它应该只让你的进程等待那么久,但你可能还想杀死它继续前进:

if (!tcpdump.WaitForExit(3000)) {
    tcpdump.Kill();
}

此外,根据文档,您应该在调用.StandardOutput.ReadToEnd() 之前先调用WaitForExit(),否则您可能会进入死锁 - 看起来您就是这样。因此,请尝试将您的代码更新为:

string tcpdump_output = tcpdump.StandardOutput.ReadToEnd();
if (!tcpdump.WaitForExit(3000)) {
    tcpdump.Kill();
}
于 2012-08-27T10:02:39.060 回答
0

它对你有用然后你检查

if (tcpdump.EndOfStream)
{
    // ...
}

在读到最后之前?

于 2012-08-27T10:04:17.797 回答