【问题标题】:Command execution time in Java [duplicate]Java中的命令执行时间[重复]
【发布时间】:2021-03-02 04:16:20
【问题描述】:

有没有办法知道命令的执行时间?使exec同步

Runtime rt = Runtime.getRuntime();
Process process = rt.exec(ffmpeg +" -i "+source+" -vcodec h264 -acodec aac  "+destination);

ffmpeg 命令需要时间,所以我想在执行后记录一些内容。命令执行后有什么方法可以记录这些东西吗?

【问题讨论】:

  • 所以,您的基本问题归结为 - 如何计算两个时间点之间的持续时间。这是一个常见的问题,但由于自 Java 8 以来日期/时间 API 发生了变化,因此找到正确答案可能会有些混乱。但是,如果答案不喜欢 java.time.* API,那么这不是您要寻找的答案。 For example
  • nope @MadProgrammer 我知道执行。我想让这个同步..以便在转换(ffmeg进程)完成后执行。
  • 那么,什么时候去处理它?只需waitFor 即可完成该过程 - 可能需要检查exitCode 并打印一份声明
  • @DanyalSandeelo 可能重复 Wait for process to finish before proceeding in Java - 同样,这不是一个不常见的问题,尽管我建议使用 ProcessBuilder
  • "我想在执行后记录一些东西。" @MadProgrammer 和日志在执行后立即完成他们的工作,我想在进程完成转换后完成。

标签: java command-execution


【解决方案1】:

你可以记录进程开始前的时间,waitFor它结束,然后再记录时间,减去两者:

long before = System.currentTimeMillis();
Runtime rt = Runtime.getRuntime();
Process process =
    rt.exec(ffmpeg + " -i " + source + " -vcodec h264 -acodec aac  " + destination);
process.waitFor();
long after = System.currentTimeMillis();
long execTime = after - before;
System.out.println("Processing took " + execTime + " milliseconds");

【讨论】:

  • 我测试了waitFor() 似乎它停止了一切,或者我没有等待太多......让我再试一次。
  • @DanyalSandeelo:如果进程产生任何输出,那么您必须使用该输出,否则进程可能会挂起。
  • 我们如何消费它?它生成输出,但我不需要该输出。我只需要执行,因为输出是另一个文件。
  • @DanyalSandeelo 使用ProcessBuilder - 它将提供更多功能和配置选项,并解决与Process 相关的一些问题 - 作为crud example
  • @MadProgrammer 你是对的。process.waitFor(); 不适合我。流程构建器有意义
猜你喜欢
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 2018-07-16
  • 2021-01-29
  • 2016-03-21
  • 1970-01-01
相关资源
最近更新 更多