首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unix time命令可以干扰正在运行的程序吗?

Unix time命令可以干扰正在运行的程序吗?
EN

Stack Overflow用户
提问于 2012-12-13 12:04:48
回答 1查看 344关注 0票数 2

从时间Unix命令的这个答案中,我了解了时间是如何工作的。它分叉一个新进程并在该新进程中执行命令。然而,我遇到了一种我无法理解的行为。

我正在尝试分析DaCapo基准套件的一个基准。我想用不同的配置(线程数和迭代次数)启动它,忽略基准输出,使用时间记录真实的、用户的和系统的时间。对于绝大多数配置,我的脚本工作得很好,启动基准测试并记录时间。

对于一个特定的配置(大型数据集、两个线程和十个迭代),基准测试有时不会达到终止(80%的情况下,在几乎100个临时测试中)。这是我用来启动它的命令:

代码语言:javascript
复制
(time -p java -jar DaCapo.jar lusearch -s large -t 2 -i 10 
 >/dev/null 2>/dev/null) 2>&1 | awk '{print $2 $4 $6}' > timed &

但是,如果我不预先准备时间,基准测试就会100%地终止(在大约100次测试中):

代码语言:javascript
复制
(java -jar DaCapo.jar lusearch -s large -t 2 -i 10 >/dev/null 2>/dev/null)

这种行为只发生在这个基准测试中--对于这个配置-,而如果配置其他基准测试或者使用不同数量的线程或不同的迭代次数,我不认为会发生相同的事情。我的猜测是,这与时间所做的事情有关,这会干扰基准。

我不知道fork+exec如何能够改变基准行为。有什么能导致这种情况的具体原因吗?例如:时间是否也在使用基准测试想要使用的资源?我在启动基准测试时做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2012-12-13 23:26:35

“没有达到终止”相当模糊。您将错过任何错误消息,因为您将向/dev/null发送所有内容。如果不知道这个程序做什么,没有错误信息,没有回溯,就不可能给出一个明确的答案。

我唯一能想到的实际区别是,在第二种情况下,你并没有背弃它。使用某些管道和重定向组合的Bash不会在背地时将/dev/null重定向到stdin。程序的某些部分可能对此很敏感。有关需要显式重定向的一些示例,请参阅我的测试案例。Bash在这里并不完全遵循POSIX,并且与所有其他shell不同,它们具有异步列表、管道和重定向的某些组合。

我很怀疑这和time有什么关系。如果你在这里找不到更好的答案,也许可以问一下“帮助”列表,但是如果没有更好的信息,他们就无法做得更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13859491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档