小编典典

如何在 Bash 中给定超时后杀死子进程?

all

我有一个 bash
脚本,它启动一个子进程,该进程不时崩溃(实际上是挂起)并且没有明显的原因(封闭源代码,所以我无能为力)。因此,我希望能够在给定的时间内启动此进程,如果在给定的时间后没有成功返回,则将其终止。

有没有一种 简单健壮 的方法来使用 bash 实现这一目标?

PS:告诉我这个问题是否更适合服务器故障或超级用户。


阅读 69

收藏
2022-07-18

共1个答案

小编典典

(见: BASH FAQ entry #68:“我如何运行命令,并让它在 N
秒后中止(超时)?”

如果您不介意下载某些东西,请使用timeout( sudo apt-get install timeout)
并像这样使用它:(大多数系统已经安装了它,否则使用sudo apt-get install coreutils

timeout 10 ping www.goooooogle.com

如果您不想下载某些内容,请执行 timeout 在内部执行的操作:

( cmdpid=$BASHPID; (sleep 10; kill $cmdpid) & exec ping www.goooooogle.com )

如果您想为更长的 bash 代码设置超时,请使用第二个选项:

( cmdpid=$BASHPID; 
    (sleep 10; kill $cmdpid) \
   & while ! ping -w 1 www.goooooogle.com 
     do 
         echo crap; 
     done )
2022-07-18