是否有可能从bash脚本中设置超时?

有时候我的bash脚本没有明确的理由挂起来

所以他们实际上可以永远挂起(脚本进程将运行,直到我杀了它)

例如半小时之后,是否可以在bash脚本超时机制中结合以退出程序?

此Bash-only方法通过运行一个函数作为后台作业来强制执行超时,从而将所有超时代码封装在脚本中:

#!/bin/bash Timeout=1800 # 30 minutes function timeout_monitor() { sleep "$Timeout" kill "$1" } # start the timeout monitor in # background and pass the PID: timeout_monitor "$$" & Timeout_monitor_pid=$! # <your script here> # kill timeout monitor when terminating: kill "$Timeout_monitor_pid" 

请注意,该功能将在一个单独的过程中执行。 因此必须通过被监视进程的PID( $$ )。 为了简洁,我省略了通常的参数检查。

如果你有Gnu coreutils,你可以使用timeout命令:

 timeout 1800s ./myscript 

要检查是否发生超时,请检查状态码:

 timeout 1800s ./myscript if (($? == 124)); then echo "./myscript timed out after 30 minutes" >>/path/to/logfile exit 124 fi