[macos] Mac OS X의 시간 초과 명령?

Mac OSx에서 시간 초과 명령에 대한 대안이 있습니까? 기본 요구 사항은 지정된 시간 동안 명령을 실행할 수 있다는 것입니다.

예 :

timeout 10 ping google.com

이 프로그램은 Linux에서 10 초 동안 ping을 실행합니다.



답변

당신이 사용할 수있는

brew install coreutils

그런 다음 시간 초과가 필요할 때마다

gtimeout

.. 대신. Homebrew주의 사항 섹션에서 발췌 한 이유를 설명하려면 :

주의 사항

모든 명령은 접두사 ‘g’로 설치되었습니다.

이러한 명령을 정상적인 이름으로 사용해야하는 경우 다음과 같이 bashrc에서 PATH에 “gnubin”디렉토리를 추가 할 수 있습니다.

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의 Timeout Package는 Mac에서 컴파일하도록 만들 수 있으며 작동합니다. 패키지는 http://packages.ubuntu.com/lucid/timeout 에서 사용할 수 있습니다 .


답변

넌 할 수있어 ping -t 10 google.com >nul

> nul은 출력을 제거합니다. 따라서 123.45.67.8 BLAH BLAH BLAH에서 64 바이트를 표시하는 대신 시간이 초과 될 때까지 빈 줄 바꿈 만 표시합니다. -t 플래그는 임의의 숫자로 변경할 수 있습니다.


답변