Mac OS X上的超时命令?

Mac OSx上是否有超时命令的替代方法? 基本的要求是我能够运行一个指定的时间的命令。

例如:

timeout 10 ping google.com 

这个程序在Linux上运行10秒钟。

您可以使用

 brew install coreutils 

然后,每当你需要超时,使用

 gtimeout 

..代替。 为了解释为什么这里是一个从自制的警告部分片段:

注意事项

所有的命令都已经安装了前缀'g'。

如果你真的需要使用这些命令的正常名称,你可以从你的bashrc中添加一个“gnubin”目录到你的PATH中:

 PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" 

此外,如果您从bashrc中将“gnuman”目录添加到MANPATH中,则可以使用普通名称访问它们的手册页:

 MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH" 

另一个简单的方法,几乎​​跨平台(因为它使用几乎无处不在的perl)是这样的:

 function timeout() { perl -e 'alarm shift; exec @ARGV' "$@"; } 

从这里挂了: https ://gist.github.com/jaytaylor/6527607

不要把它放在一个函数中,你可以把下面这行放在一个脚本中,它也可以工作:

timeout.sh

 perl -e 'alarm shift; exec @ARGV' "$@"; 

或者内置帮助/示例的版本:

timeout.sh

 #!/usr/bin/env bash function show_help() { IT=$(cat <<EOF Runs a command, and times out if it doesnt complete in time Example usage: # Will fail after 1 second, and shows non zero exit code result $ timeout 1 "sleep 2" 2> /dev/null ; echo \$? 142 # Will succeed, and return exit code of 0. $ timeout 1 sleep 0.5; echo \$? 0 $ timeout 1 bash -c 'echo "hi" && sleep 2 && echo "bye"' 2> /dev/null; echo \$? hi 142 $ timeout 3 bash -c 'echo "hi" && sleep 2 && echo "bye"' 2> /dev/null; echo \$? hi bye 0 EOF ) echo "$IT" exit } if [ "$1" == "help" ] then show_help fi if [ -z "$1" ] then show_help fi # # Mac OS-X does not come with the delightfully useful `timeout` program. Thankfully a rough BASH equivalent can be achieved with only 2 perl statements. # # Originally found on SO: http://stackoverflow.com/questions/601543/command-line-command-to-auto-kill-a-command-after-a-certain-amount-of-time # perl -e 'alarm shift; exec @ARGV' "$@"; 

您可以使用此命令来限制任何程序的执行时间:

 ping -t 10 google.com & sleep 5; kill $! 

从Ubuntu / Debian的超时软件包可以在Mac上编译,它的工作原理。 该软件包位于http://packages.ubuntu.com/lucid/timeout

不幸的是,在macos afaik上没有超时程序,但你可以尝试这里提到的答案: 命令行命令在一段时间后自动杀死一个命令

而且,如果你真的想在这里运行“ping”,你可以运行

 ping -t 10 google.com