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