gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:04 24 4
gpt4 key购买 nike

我想在后台运行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等会fork子进程,我希望执行时间包括子进程和后代进程的执行时间。但是它导致了如下错误:

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

我认为在 backsticks 部分,wait 命令将等待 test1.sh 等后台脚本终止。我无法弄清楚语法出了什么问题。

最佳答案

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

要绕过这个可以理解的约束,您可以使用带有 \ 的子 shell (...) 来继续该行。

time (./test1.sh & \ wait) &> record_1
time (./test2.sh & \ wait) &> record_2
time (./test3.sh & \ wait) &> record_3

关于linux - 如何在shell脚本中获取子进程和后代进程的执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21819657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com