程序在脚本调用时冻结

Program freezes when called by script!

本文关键字:冻结 调用 脚本 程序      更新时间:2023-10-16

发帖前我到处找,但找不到答案。。

我需要计算算法执行时间的一些统计数据(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重定向到一个文件。(

你怎么知道它被冻结了?文件中没有添加任何内容?这可能只是一种缓冲。大多数程序缓冲输出,除非它们正在向终端写入。

问题实际上是黑盒。。当应用奇怪的参数时,它冻结了,我通过对主程序进行一些检查来解决它。感谢大家!