如何在 shell 脚本中获取子进程和后进程的执行时间



我想在后台运行 test1.sh、test2.sh 和 test3.sh,并分别记录执行时间。所以我使用了以下命令。

time `./test1.sh & ; wait` > record_1
time `./test2.sh & ; wait` > record_2
time `./test3.sh & ; wait` > record_3

虽然 test1.sh 中的内容可能会调用其他脚本:

./other_test1.sh &

所以 test2.sh 和 test3.sh 可以打电话给./other_test2.sh和./other_test3.sh

我想使用 wait 的原因是因为 test1.sh 和其他人会分叉子进程,我希望执行时间包括子进程和后进程的执行时间。但是,它导致了如下错误:

bash: command substitution: line 1: syntax error near unexpected token `;'
bash: command substitution: line 1: `./test2 & ;wait'

我的想法是在背杆部分,等待命令将等待像 test1.sh 这样的后台脚本被终止。我无法弄清楚语法出了什么问题。

由于 &; 都是分隔命令并具有相同优先级的列表运算符,因此不能将它们一起使用。 这样做类似于同时使用多个条件列表运算符,如 command1 && || command2 。这是一个逻辑上的矛盾。

为了绕过这个可以理解的约束,您可以使用带有的子外壳(...)来继续该行。

time (./test1.sh &  wait) &> record_1
time (./test2.sh &  wait) &> record_2
time (./test3.sh &  wait) &> record_3
如果要

测量 test.sh 的执行时间,则不需要&; wait。此外,您不能仅使用 > 重定向时间输出。使用这个: bash -c 'time ./test1.sh' &> record_1

因此,您可能会得出以下几行结论:

bash -c 'time ./test1.sh' &> record_1
bash -c 'time ./test2.sh' &> record_2
bash -c 'time ./test3.sh' &> record_3

相关内容

  • 没有找到相关文章

最新更新