ম্যাক ওএস এক্সের সময়সীমা কমান্ড?


90

ম্যাক ওএসএক্সে টাইমআউট কমান্ডের বিকল্প আছে কি? প্রাথমিক প্রয়োজনীয়তা হ'ল আমি একটি নির্দিষ্ট সময়ের জন্য একটি কমান্ড চালাতে সক্ষম হয়েছি।

যেমন:

timeout 10 ping google.com

এই প্রোগ্রামটি লিনাক্সে 10 সেকেন্ডের জন্য পিং চালায়।


উত্তর:


134

তুমি ব্যবহার করতে পার

brew install coreutils

এবং তারপরে যখনই আপনার সময়সীমা দরকার, ব্যবহার করুন

gtimeout

..পরিবর্তে. হোমব্রুউ ক্যাভেটস বিভাগ থেকে এখানে একটি স্নিপেট কেন তা ব্যাখ্যা করতে:

গুহা

সমস্ত কমান্ডগুলি 'g' উপসর্গের সাথে ইনস্টল করা হয়েছে।

আপনার যদি এই কমান্ডগুলি তাদের সাধারণ নামের সাথে সত্যই ব্যবহার করার প্রয়োজন হয় তবে আপনি আপনার বাশার্ক থেকে আপনার রাস্তায় একটি "gnubin" ডিরেক্টরি যুক্ত করতে পারেন:

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

অতিরিক্ত হিসাবে, আপনি যদি আপনার বাশার্ক থেকে আপনার মনপথে "gnuman" ডিরেক্টরিটি যুক্ত করেন তবে আপনি তাদের সাধারণ পৃষ্ঠাগুলি অ্যাক্সেস করতে পারেন:

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

21
তারপরে: ওরফে টাইমআউট = গাইমআউট
এনকেডওয়া

4
অথবা ln -s /usr/local/bin/gtimeout /usr/local/bin/timeoutকেবলমাত্র একটি কমান্ড সক্ষম করতে (ওরফে সমাধান ইন্টারেক্টিভ সিএলআই ব্যবহারের জন্য কাজ করে, তবে বাশ স্ক্রিপ্ট থেকে কল করার সময় নয়)।
জন ওয়াই

4
ইনস্টলড কোয়ার্টিলগুলি পরে আমার পক্ষে টাইম আউট উপলব্ধ হয়ে গেছে সময় হিসাবে: এলএনএস / ইউএসআর / লোকাল / বিন / গাইমআউট / ইউএসআর / লোকাল / বিন / টাইমআউট এলএন: /
ইউএসআর

আপডেট: আমি সবেমাত্র কোর্টিল ব্যবহার করে ইনস্টল করেছি brew install coreutilsএবং timeoutকমান্ডটি উপসর্গ ছাড়াই উপলব্ধ ছিল।
tdensmore

24

আর একটি সহজ পদ্ধতির যা বেশ প্রায় ক্রস প্ল্যাটফর্মের সাথে কাজ করে (কারণ এটি পার্ল ব্যবহার করে যা প্রায় সর্বত্র রয়েছে) এটি হ'ল

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' "$@";

এটি কোনও ফাংশনে মোড়ানো না রেখে সরাসরি ব্যবহার করার মতো দেখতে কী লাগে?
mwfearnley

এটি বেশ কার্যকরভাবে কেবল ফাংশনটি সরিয়ে ফেলুন এবং পার্ল লাইনটি ছেড়ে দিন ... আমি উপরে আরও বিশদ রেখেছি!
ব্র্যাড পার্কগুলি

এটি একক-ব্যবহারের ওয়ান-লাইনারের মতো দেখতে কেমন? এরকম কিছু perl -e 'alarm shift; exec "ping google.com"?
mwfearnley

দুর্ভাগ্যক্রমে এটি Alarm clockবার্তা উত্পন্ন করে যখন টাইমারটির মেয়াদ শেষ হয় এবং এটি মুছে ফেলা অদৃশ্য হয়ে যায়
রিচভেল

4
আপনার আরও নির্ভুলতার প্রয়োজন হলে ইউআরআরএম সংস্করণ যুক্ত করা ভাল: function timeout() { perl -e 'use Time::HiRes "ualarm"; ualarm shift; exec @ARGV' "$@"; } (নোট করুন যে এটি পার্লডের প্রয়োজন> = 5.8 perldoc.perl.org/funitions/alarm.html অনুযায়ী )
gib

6

আপনি এই আদেশটি ব্যবহার করে যে কোনও প্রোগ্রামের প্রয়োগের সময় সীমাবদ্ধ করতে পারেন:

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

9
এটি সম্ভবত আপনি চান না। ফলাফলটি হ'ল কমান্ডটি ঠিক 5 সেকেন্ড চলবে। অর্থ, আপনি যদি এটি সর্বাধিক সময় চান তবে মিনিটও না চান তবে আপনি যা খুঁজছেন তা নয়
gesell

2

উবুন্টু / ডেবিয়ান থেকে টাইমআউট প্যাকেজটি ম্যাকের উপর সংকলন করা যায় এবং এটি কাজ করে। প্যাকেজটি http://packages.ubuntu.com/lucid/timeout এ উপলব্ধ


4
হোমব্রিউ ব্যবহারের একটি সহজ উপায়: brew install coreutils- তারপরে নামটি gtimeoutব্যবহার করতে আপনার PATH ব্যবহার করুন বা সেট করুন timeout
রিচভেল

1

আপনি করতে পারেন ping -t 10 google.com >nul

the> নুল আউটপুট থেকে মুক্তি পায়। সুতরাং 123.45.67.8 ব্লেথ ব্ল্যাব থেকে B৪ টি বাইটিস দেখানোর পরিবর্তে এটি সময় শেষ না হওয়া অবধি কেবল একটি ফাঁকা নিউলাইন প্রদর্শন করবে। -t পতাকা যে কোনও সংখ্যায় পরিবর্তিত হতে পারে।


4
পিং সত্যিই একটি নমুনা ছিল। আমি কিছু মেট্রিক সংগ্রহের জন্য একটি প্রোগ্রাম চালাতে চাই
sheki
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.