程序在脚本调用时冻结
Program freezes when called by script!
发帖前我到处找,但找不到答案。。
我需要计算算法执行时间的一些统计数据(Avg、St.Dev.等(,所以我得到了这个c++程序(bb.exe(,它启动算法并输出comp时间。
每当我从shell启动这个程序时,它都会花费一些时间,但运行良好。
由于执行速度不是很快,我编写了一个c程序(CalculateStat(,它使用系统((调用
system("bb.exe > output.txt");
执行多次以前的算法,然后计算所需的统计数据,这样我就可以启动"./CalculateStat",几个小时后回来查看结果。
CalculateStat输出(标准输出(由bb.exe.打印的每一行
问题是,当CalculateStat启动bb.exe时,碰巧bb.exe无故冻结(大约每6次计算冻结2次(,所以我必须杀死它(ctrl+c(才能让CalculateState继续运行。
起初,我觉得这可能是"系统"调用的问题,所以我写了一个perl脚本,做了几乎相同的事情,但我遇到了同样的问题。
有人有什么建议吗?
编辑--我认为问题可能是对输出文件的并发访问,所以我从"CalculateStat"中删除了读取文件的部分,只留下连续调用。。但它仍然冻结
编辑2--哇!它变得太奇怪了,所以我一直试图从终端调用原始的bb.exe,但它也冻结了。。现在我知道问题只是bb随机冻结,(它在测试过程中从未冻结,它在统计计算中开始冻结。(
不管怎样,现在这个问题毫无意义。。对不起大家:(
嗯,我不明白你为什么要使用C程序来重复启动一个程序。你不能直接从shell脚本中执行吗。如果它再次冻结,将缩小搜索范围。
您应该能够看到进程使用ps命令所做的操作。我的猜测是它阻塞了您没有重定向的"标准错误"文件句柄。(使用&>而不是>将stdout和stderr重定向到一个文件。(
你怎么知道它被冻结了?文件中没有添加任何内容?这可能只是一种缓冲。大多数程序缓冲输出,除非它们正在向终端写入。
问题实际上是黑盒。。当应用奇怪的参数时,它冻结了,我通过对主程序进行一些检查来解决它。感谢大家!
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- WIN32:C++,为什么在WM_CLOSE上调用Messagebox函数程序正在冻结
- 程序在对mouse_event的 Windows API 调用中冻结
- 调用删除会导致程序冻结C++
- 函数调用会导致C++程序冻结,除非在调试器中逐步执行
- 当我调用一个函数时,c++列表程序冻结
- 程序在脚本调用时冻结