当前位置: 首页 > 知识库问答 >
问题:

bash脚本不会等待其他进程完成来打印持续时间

陆光济
2023-03-14

我试图测量我的过程完成所需的时间,如下所示:

#!/bin/bash


SECONDS=0
launching some processes
process1
process2
process3

duration=$SECONDS
echo "Time: $duration"

但是,它会在脚本运行时立即打印echo,然后其他进程开始运行,因此时间不考虑进程的持续时间。我怎么能让它等到进程完成,然后打印持续时间?

我的流程是这样的,这里有一个例子:

$ROOT/transform --config=file1.xml --param2=value2 --param3=file3.xml $TARGET/input.xml > $TARGET/output2.xml

共有2个答案

谷梁子昂
2023-03-14

您必须在回声之前等待等待以等待进程结束。喜欢这个:

wait
echo "Time: $duration'
卫乐童
2023-03-14

使用< code>time命令,例如

shell> time my_shellscript.sh

它会为你做这项工作。这里有一个网站解释它。或者更多信息的手册页。

如果你想在你的shellscript中做到这一点,你必须指定你正在等待的进程的PID(或多个)。

#!/bin/bash

process1 &
PID_process1=$!
process2 &
PID_process2=$!

wait $PID_process1 $PID_process2
 类似资料:
  • start.sh是父脚本。当SIGTERM被捕获时,它会被转发到其子进程的3个。 为什么即使我在任一情况下等待3个pid(子进程)也存在这种差异?为什么我在等待3个pids时需要睡眠?

  • 问题内容: 我有这个代码: 发生的是该文件在实际执行之前已删除。 这是因为文件仅包含本机系统调用吗?执行文件 后 如何删除?(我不知道文件的输出是什么,因为它是动态变化的)。 问题答案: 通过使用,您要求在后台启动批处理文件: 因此,您从Java()启动的进程将在后台进程完成之前返回。 删除命令以在前台运行批处理文件-然后,将等待批处理文件完成: 根据OP,重要的是要有可用的控制台窗口-这可以通过

  • 在退出脚本(TCL/Bash)之前,如何确保所有后台进程都已完成执行。 我想把我所有的后台进程PID写到一个pidfile中。然后在最后pgrep PID file,看看在我退出之前是否还有进程在运行。 有什么更简单的方法吗?而TCL有没有具体的办法做到这一点呢?

  • 我在blender中有一个python脚本 我试着用通勤,但还是没用: 此shell脚本在MacOS上非常有效(在更改路径后),并且在使用时会等待 但是在Windows上,我在Blender中运行下面的python脚本,然后一旦它到达子进程行就会打开并运行shell脚本,而Blender不等待它完成,它只在控制台中打印而不等待Git Bash完成。有人帮忙吗?

  • 首先,我决定让我的类阻塞(让消费者更容易使用,但对我来说可能更乏味)。而不是让使用者定义异步回调。这是一个好的设计模式吗?这样,用户可以获得预期的行为,但如果他们对线程被阻塞的时间不满意,则可以实现自己的多线程。 我有一个构造函数,它根据异步回调的结果在类中设置最后一个字段: 这不起作用,所以我使用了原子引用,并实现了一个阻塞循环,直到返回结果,如下所示: 这是阻止/检索结果的好方法吗?

  • 问题内容: 我有一个代码,其中4个线程同时运行。我想等到所有这4个线程都结束。并且只有在那之后才能继续应用程序流程。 我尝试了两种方法: ,这种方法可以正常工作。之后的代码仅在所有线程完成后才执行。 ,此技术允许执行代码,即使并非所有线程都已完成,也可以执行代码。 代码示例: 我的问题: 为什么并且不要等到所有线程都完成并打印出来 _«我们完成了! 所有线程都完成了!» _刚打完电话? 问题答案: