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

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

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

P.S.:告诉我这个问题是否更适合 serverfault 或 super 用户。

最佳答案

(见于: BASH FAQ entry #68: "How do I run a command, and have it abort (timeout) after N seconds?" )

如果您不介意下载某些东西,请使用 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 )

https://stackoverflow.com/questions/5161193/

相关文章:

python - super() 失败并出现错误 : TypeError "argument 1 m

python - 如何将 Pandas 数据添加到现有的 csv 文件中?

python - 您需要安装 postgresql-server-dev-X.Y 来构建服务器端扩展

python - 为什么我不能在 python 中创建一个轮子?

linux - 好的 Linux (Ubuntu) SVN 客户端

python - 在 Python 中获取大文件的 MD5 哈希

linux - 从ssh注销后如何使程序继续运行?

python - 为什么使用 Python 的 os 模块方法而不是直接执行 shell 命令?

python - 如何打印字典的键?

python - 如何在 python-3.x 中使用字典格式化字符串?