क्या मैक ओएसएक्स पर टाइमआउट कमांड के लिए कोई विकल्प है। मूल आवश्यकता यह है कि मैं एक निर्दिष्ट समय के लिए एक कमांड चलाने में सक्षम हूं।
उदाहरण के लिए:
timeout 10 ping google.com
यह प्रोग्राम लिनक्स पर 10s के लिए पिंग चलाता है।
क्या मैक ओएसएक्स पर टाइमआउट कमांड के लिए कोई विकल्प है। मूल आवश्यकता यह है कि मैं एक निर्दिष्ट समय के लिए एक कमांड चलाने में सक्षम हूं।
उदाहरण के लिए:
timeout 10 ping google.com
यह प्रोग्राम लिनक्स पर 10s के लिए पिंग चलाता है।
जवाबों:
आप उपयोग कर सकते हैं
brew install coreutils
और फिर जब भी आपको टाइमआउट की जरूरत हो, उपयोग करें
gtimeout
..बजाय। यह समझाने के लिए कि होमब्रेव कैविट्स अनुभाग से एक स्निपेट क्यों:
चेतावनियां
सभी कमांड उपसर्ग 'जी' के साथ स्थापित किए गए हैं।
यदि आपको वास्तव में इन आदेशों को उनके सामान्य नामों के साथ उपयोग करने की आवश्यकता है, तो आप अपने bashrc से अपने PATH में "gnubin" निर्देशिका जोड़ सकते हैं:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
इसके अतिरिक्त, यदि आप अपने मैनपाट में "gnuman" निर्देशिका को अपने bashrc से भी जोड़ते हैं, तो आप उनके मैन पेजों को सामान्य नामों से एक्सेस कर सकते हैं:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
ln -s /usr/local/bin/gtimeout /usr/local/bin/timeout
सिर्फ एक कमांड को सक्षम करने के लिए (उर्फ समाधान इंटरेक्टिव सीएलआई उपयोग के लिए काम करता है, लेकिन बैश स्क्रिप्ट से नहीं बुलाया जाता है)।
brew install coreutils
, और timeout
कमांड उपसर्ग के बिना उपलब्ध था।
एक और सरल दृष्टिकोण जो बहुत अधिक पार मंच काम करता है (क्योंकि यह पर्ल का उपयोग करता है जो लगभग हर जगह है) यह है:
function timeout() { perl -e 'alarm shift; exec @ARGV' "$@"; }
यहां से स्नैग्ड: https://gist.github.com/jaytaylor/6527607
इसे एक फंक्शन में रखने के बजाय, आप बस एक स्क्रिप्ट में निम्नलिखित लाइन डाल सकते हैं, और यह भी काम करेगा:
perl -e 'alarm shift; exec @ARGV' "$@";
या एक संस्करण जो मदद / उदाहरणों में बनाया गया है:
#!/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' "$@";
perl -e 'alarm shift; exec "ping google.com"
?
Alarm clock
संदेश उत्पन्न करता है जब टाइमर समाप्त हो जाता है , और इसे समाप्त करने से गड़बड़ हो जाती है ।
function timeout() { perl -e 'use Time::HiRes "ualarm"; ualarm shift; exec @ARGV' "$@"; }
(ध्यान दें कि इसके लिए Perl> = 5.8 की आवश्यकता होती है perldoc.perl.org/functions/alarm.html के अनुसार )
आप इस आदेश का उपयोग करके किसी भी कार्यक्रम के निष्पादन समय को सीमित कर सकते हैं:
ping -t 10 google.com & sleep 5; kill $!
उबंटू / डेबियन से टाइमआउट पैकेज मैक पर संकलित करने के लिए बनाया जा सकता है और यह काम करता है। पैकेज http://packages.ubuntu.com/lucid/timeout पर उपलब्ध है
brew install coreutils
- फिर नाम gtimeout
का उपयोग करने के लिए अपने पैट का उपयोग करें या सेट करें timeout
।
तुम कर सकते हो ping -t 10 google.com >nul
> nul को आउटपुट से छुटकारा मिलता है। इसलिए 123.45.67.8 BLAH BLAH BLAH से 64 BYTES दिखाने के बजाय यह केवल एक खाली नई पंक्ति दिखाएगा, जब तक कि यह समय समाप्त न हो जाए। -t झंडा किसी भी संख्या में बदला जा सकता है।