程序在脚本调用时冻结!

时间:2011-07-05 12:26:45

标签: c++ perl shell freeze

我在发帖前到处搜索,但找不到答案..

我需要为算法的执行时间计算一些统计数据(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随机冻结,(它在试验期间从未冻结) ,它开始冻结统计数据。)

无论如何,现在这个问题没有意义..对不起大家:(

4 个答案:

答案 0 :(得分:0)

嗯,我不明白你为什么要用C程序反复启动一个程序。你不能直接从shell脚本执行此操作。如果它再次冻结,它将缩小搜索范围。

答案 1 :(得分:0)

您应该能够通过ps命令查看进程正在执行的操作。我的猜测是它阻止你没有重定向的“标准错误”文件句柄。 (使用&>而不是>将stdout和stderr重定向到文件。)

答案 2 :(得分:0)

你怎么知道它冻结了?没有添加到文件中?那可能就是缓冲。大多数程序都会缓冲输出,除非它们写入终端。

答案 3 :(得分:0)

问题实际上是Blackbox ..当应用奇怪的参数时它很冷,我通过对主程序使用一些检查来解决它。谢谢大家!