Perl:系统命令在完成之前返回

时间:2014-03-19 12:51:22

标签: perl

我在我的运行在Linux上的perl脚本中使用了一些system()命令。

我使用system()函数运行的命令将其数据输出到日志,然后我将其解析以决定下一步该做什么。 我注意到,有时看起来解析日志文件的代码(在<{strong> system()函数之后)不使用最终日志。

例如,我在日志文件中搜索“测试通过”短语 - 即使我打开日志,脚本也找不到它。

另一个例子 - 我尝试删除放置日志的文件夹,但它不允许我,因为它是“非空”。当我尝试手动删除它时,它会被删除但有错误。

(这些例子时不时发生,但大部分时间都不会发生)

对我来说,这似乎是某种“时机”问题。我该如何解决?

1 个答案:

答案 0 :(得分:0)

如果您想要安全且在Linux上,请在每次写入磁盘的命令之后调用system sync;,然后再从磁盘读取。这将迫使操作系统将仍然缓冲的所有内容写入文件系统,然后才返回。因此,您可以确定,当它完成时,您写入文件的所有内容现在实际上已到达那里。

但请注意,在许多情况下,这可能是矫枉过正的。有这些缓冲区的原因并且不断地手动调用sync很可能不是实现目标的最快方式。另请参阅http://linux.die.net/man/8/sync

例如,如果你在写作和阅读之间有其他的东西,比如一些计算或其他什么,这可能就足够了,你不会浪费时间告诉操作系统你更了解如何和什么时候必须做它的工作。 ^^

但是,如果完美的效率不是您的主要关注点(并且您不应该使用Perl),那么在修改文件的所有内容之后以及访问这些文件之前system sync;可能是好的和安全的。