Bash - 在一段时间后终止命令[重复]

Posted

技术标签:

【中文标题】Bash - 在一段时间后终止命令[重复]【英文标题】:Bash - kill a command after a certain time [duplicate] 【发布时间】:2021-11-19 13:23:27 【问题描述】:

在我的 bash 脚本中,我运行了一个激活脚本的命令。我在 for 循环中多次重复此命令,因此希望等到脚本完成后再运行它。我的bash脚本如下

for k in $(seq 1 5)
do
   sed_param='s/mu = .*/mu = '$mu';/'
   sed -i "$sed_param" brusselator.c
   make brusselator.tst &
done

据我所知,最后的 & 让脚本知道要等到命令完成,但这不起作用。还有其他方法吗?

此外,有时命令可能需要很长时间,在这种情况下,我最多希望等待 5 秒。但如果命令提前完成,我不想等待 5 秒。有什么方法可以实现吗?

【问题讨论】:

'据我所知,最后的 & 让脚本知道等到命令完成' 不;它恰恰相反。等待命令完成是默认设置,所以不要使用& 要在一段时间后杀死某些东西,您可以查看timeout 命令。 至于超时:the timeout command怎么样? 这个循环似乎没有意义,$mu 是否在某处被修改?实际上,这是运行完全相同的命令 5 次,而 sed 实际上不会做任何事情。 @BenjaminW。我有更多循环,所以 $mu 在另一个循环中被修改,但对于这个例子,我只复制了内部循环;) 【参考方案1】:

timeout 命令。你会像这样使用它

timeout -k 5 make brusselator.tst

也许你还想看看它是成功退出、失败还是因为超时而被杀死。

timeout -k 5 make brusselator.tst && echo OK || echo Failed, status $?

如果命令超时,并且 --preserve-status 未设置,则命令以状态 124 退出。不同的状态意味着 make 在超时之前因不同原因失败。

【讨论】:

以上是关于Bash - 在一段时间后终止命令[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Xcode iPhone应用程序在一段时间后消失[重复]

安卓。报警管理器。重复警报不会触发,并且在一段时间后会立即触发所有警报

sed中未终止的`s'命令[重复]

如何创建一个新线程并在一段时间后终止它?

Android - 前台在 Oreo 中不起作用。操作系统在一段时间后终止服务

Task.Run()和Task.Delay()在一段时间后终止