我有一个bash脚本,它启动一个子进程,该进程会不时崩溃(实际上是挂起),而且没有明显的原因(源代码是封闭的,所以我对此无能为力).因此,我希望能够在给定的时间内启动这个过程,如果在给定的时间后它没有成功返回,我会终止它.
使用bash有没有simple和robust种方法可以实现这一点?
备注:请告诉我这个问题是否更适合serverfault或超级用户.
我有一个bash脚本,它启动一个子进程,该进程会不时崩溃(实际上是挂起),而且没有明显的原因(源代码是封闭的,所以我对此无能为力).因此,我希望能够在给定的时间内启动这个过程,如果在给定的时间后它没有成功返回,我会终止它.
使用bash有没有simple和robust种方法可以实现这一点?
备注:请告诉我这个问题是否更适合serverfault或超级用户.
(As seen in: 100)
如果你不介意下载一些东西,请使用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 )