我在发帖前到处搜索,但找不到答案..
我需要为算法的执行时间计算一些统计数据(Avg,St.Dev。等等),所以我得到了这个启动算法并输出comp时间的c ++程序(bb.exe)
每当我从shell启动这个程序时,它都需要时间,但工作正常。
由于执行速度不是很快,我编写了一个使用system()调用的c程序(CalculateStat)
system("bb.exe > output.txt");
执行前一次算法的多次,然后计算所需的统计数据,所以我可以启动“./CalculateStat”并在几小时后回来查看结果。
计算每个由bb.exe打印的行的输出(在标准输出中)。
问题是,当CalculateStat启动bb.exe时,bb.exe无理由冻结(每6次计算冻结约2次),所以我必须杀死它(ctrl + c)让CalculateStat继续
起初,我认为它可能是“系统”调用的一个问题,所以我写了一个perl脚本做了几乎相同的事情,但我遇到了同样的问题。
有人有建议吗?
EDIT-- 我认为问题可能是并发访问输出文件,所以我从“CalculateStat”中删除了读取文件的部分,只留下连续调用..但它仍然冻结
编辑2-- 哇..它太奇怪了,所以我一直试图从终端调用原来的bb.exe,它也冻结在那里..现在我知道问题只是bb随机冻结,(它在试验期间从未冻结) ,它开始冻结统计数据。)
无论如何,现在这个问题没有意义..对不起大家:(
答案 0 :(得分:0)
嗯,我不明白你为什么要用C程序反复启动一个程序。你不能直接从shell脚本执行此操作。如果它再次冻结,它将缩小搜索范围。
答案 1 :(得分:0)
您应该能够通过ps命令查看进程正在执行的操作。我的猜测是它阻止你没有重定向的“标准错误”文件句柄。 (使用&>而不是>将stdout和stderr重定向到文件。)
答案 2 :(得分:0)
你怎么知道它冻结了?没有添加到文件中?那可能就是缓冲。大多数程序都会缓冲输出,除非它们写入终端。
答案 3 :(得分:0)
问题实际上是Blackbox ..当应用奇怪的参数时它很冷,我通过对主程序使用一些检查来解决它。谢谢大家!