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

使用bash有没有simplerobust种方法可以实现这一点?

备注:请告诉我这个问题是否更适合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 )

Linux相关问答推荐

当页面对齐关闭时,x86—64上的对象中的成员初始化器的Clang代码生成错误?

Linux x86_64上PIE ELF可执行文件的.Text段的基本虚拟地址

使用sed或awk映射自定义和任意函数

Microsoft ODBC Driver 18 for Python Docker Image,ARM设备;生成错误

在CefExecuteProcess;之前创建新线程会导致CEF应用程序崩溃并显示SIGTRAP

如何调试tokio任务挂起的位置?

为什么在已连接的设备上调用 btmgmt conn-info 返回:状态 0x02(未连接)

Git - 打印以不同编码混合的文件

cu可以从串口读取,但我自己的C程序不能

如何过滤 Bash 的正则表达式(Linux)中的所有值,除了一个?

bash 更有效的方法来转换奇数日期格式以被 linux 日期识别

获取变量中的当前路径并使用它

如何判断 Linux 机器是否支持 AVX/AVX2 指令?

如何将输出从 grep 传送到 cp?

crontab 命令单独一行

在 Emacs 中匹配括号的命令是什么?

可以通过 SSH 连接的所有用户的列表

zsh:找不到命令 laravel

以 qsub 开头的 shell 脚本的参数

如何制作和应用SVN补丁?