我试图测量我的过程完成所需的时间,如下所示:
#!/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
您必须在回声
之前等待
等待以等待进程结束。喜欢这个:
wait
echo "Time: $duration'
使用< 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个线程都结束。并且只有在那之后才能继续应用程序流程。 我尝试了两种方法: ,这种方法可以正常工作。之后的代码仅在所有线程完成后才执行。 ,此技术允许执行代码,即使并非所有线程都已完成,也可以执行代码。 代码示例: 我的问题: 为什么并且不要等到所有线程都完成并打印出来 _«我们完成了! 所有线程都完成了!» _刚打完电话? 问题答案: