【问题标题】:Bash - kill a command after a certain time [duplicate]Bash - 在一段时间后终止命令[重复]
【发布时间】: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 在另一个循环中被修改,但对于这个例子,我只复制了内部循环;)

标签: bash


【解决方案1】:

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

timeout -k 5 make brusselator.tst

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

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

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

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 2021-10-08
    • 2021-12-30
    • 2013-04-11
    • 2013-05-02
    • 2016-12-20
    • 2019-12-06
    • 2019-09-07
    相关资源
    最近更新 更多