প্রশ্ন আমি কিভাবে bash বা ksh একটি মিলিসেকেন্ড জন্য ঘুমাতে পারি


ঘুম একটি খুব জনপ্রিয় কমান্ড এবং আমরা 1 সেকেন্ড থেকে ঘুম শুরু করতে পারেন:

# wait one second please 
sleep 1

কিন্তু বিকল্প হলে কি আমাকে 0.1 সেকেন্ড অপেক্ষা করতে হবে অথবা 0.1 থেকে 1 সেকেন্ডের মধ্যে অপেক্ষা করতে হবে?

  • মন্তব্য: linux বা ওএস এক্স উপর sleep 0.XXX সূক্ষ্ম কাজ করে, কিন্তু সৌরজ উপর sleep 0.1 অথবা sleep 0.01 - অবৈধ সিনট্যাক্স

105
2018-01-15 13:19


উত্স


আমি জিজ্ঞাসা করতে পারি কেন আপনি 1 মিমি ঘুমাতে চান? - Tom O'Connor
অবশ্যই, আমার ব্যাশ স্ক্রিপ্টে আমি কয়েকটি লাইনে "ঘুম 1" যোগ করি, কিন্তু স্ক্রিপ্টটি খুব ধীরে ধীরে চালায়, তাই কিছু উপসংহারের পরে আমি ঘুমের হিসাব করে 0.1 ভাল ফলাফল এবং আরও দ্রুততর করে তুলি, বিলম্বের জন্য আমাকে অর্ডারের জন্য বিলম্ব দরকার আমার bash স্ক্রিপ্টে ssh সমস্যাটি সমাধান করার জন্য, আমি কিছু মেশিনে প্যারালেল এসএসই লগইন করে আশা করি এবং এটি বিলম্ব না করেই কাজ করবে না, যেমন আপনি আমার প্রশ্ন থেকে জানেন যে বিলম্ব লিনাক্স এবং সৌরার উভয় ক্ষেত্রেই উপযুক্ত - yael
আপনি যে কোনও সমাধানটি চয়ন করেন, মনে রাখবেন যে শেল স্ক্রিপ্ট সময়সীমার মধ্যে খুব সঠিক হবে না। - scai
নির্বাহ করার জন্য খুব অল্প সময় লাগে এমন কিছু করার বিষয়ে, কিন্তু কিছুই করে না .. echo "" >/dev/null - Tom O'Connor
ভাল ধারণা কিন্তু কিভাবে এই কমান্ড msec নিতে? , আমি 0.1 এমসিসি প্রয়োজন, তারপর যে কম না - :) - yael


উত্তর:


বাশের একটি "লোডেবেল" ঘুম রয়েছে যা আংশিক সেকেন্ডকে সমর্থন করে এবং বহিরাগত কমান্ডের ওভারহেডগুলিকে বাদ দেয়:

$ cd bash-3.2.48/examples/loadables
$ make sleep && mv sleep sleep.so
$ enable -f sleep.so sleep

তারপর:

$ which sleep
/usr/bin/sleep
$ builtin sleep
sleep: usage: sleep seconds[.fraction]
$ time (for f in `seq 1 10`; do builtin sleep 0.1; done)
real    0m1.000s
user    0m0.004s
sys     0m0.004s

Downside যে লোড হচ্ছে আপনার সাথে প্রদান করা হবে না bash বাইনারি, সুতরাং আপনাকে তাদের দেখানো হিসাবে নিজেকে সংকলন করতে হবে (যদিও সৌরগুলিতে এটি উপরের হিসাবে সহজ হিসাবে সহজ হবে না)।

হিসাবে bash-4.4 (সেপ্টেম্বর 2016) সমস্ত লোডব্লবলগুলি বর্তমানে প্ল্যাটফর্মগুলিতে ডিফল্টভাবে নির্মিত এবং ইনস্টল করা হয়েছে, যদিও এটি পৃথক ভাগ করা-বস্তু ফাইল হিসাবে তৈরি করা হয়েছে এবং এটি ছাড়া .so প্রত্যয়. যতক্ষণ না আপনার ডিস্ট্রো / ওএসটি সৃজনশীল কিছু করেছে, ততক্ষণ আপনি এটি করতে সক্ষম হবেন:

[ -z "$BASH_LOADABLES_PATH" ] &&
  BASH_LOADABLES_PATH=$(pkg-config bash --variable=loadablesdir 2>/dev/null)  
enable -f sleep sleep

(মানুষ পাতা বোঝায় BASH_LOADABLES_PATH স্বয়ংক্রিয়ভাবে সেট করা হয়, আমি 4.4.12 হিসাবে অফিসিয়াল বন্টন ক্ষেত্রে এই নয়। যদি এবং সঠিকভাবে সেট করা হয় তাহলে আপনি শুধুমাত্র প্রয়োজন enable -f filename commandname প্রয়োজনীয়.)

এটি উপযুক্ত না হলে, পরবর্তী সহজতম জিনিসটি তৈরি বা প্রাপ্ত করা হয় sleep জিএনইউ কোর্টিল থেকে, এটি প্রয়োজনীয় বৈশিষ্ট্য সমর্থন করে। POSIX sleep কমান্ড সংক্ষিপ্ত, পুরানো Solaris সংস্করণ শুধুমাত্র যে বাস্তবায়িত। সোলারিস 11 sleep  না ভগ্নাংশ সেকেন্ড সমর্থন।

একটি শেষ অবলম্বন হিসাবে আপনি ব্যবহার করতে পারেন perl (অথবা আপনার যে কোনও স্ক্রিপ্টিং যা আপনার হাতে আছে) ইন্টারপ্রেটারটি শুরু করে এমন ক্যাভিটের সাথে নিরক্ষর ঘুমের সময়ের সাথে তুলনাযোগ্য হতে পারে:

$ perl -e "select(undef,undef,undef,0.1);"
$ echo "after 100" | tclsh

59
2018-01-15 13:52



আহ, আপনি ব্যবহার করছেন expect আপনি সম্ভবত ব্যবহার করতে পারেন "after N", যেখানে N হল মিলিসেকেন্ড, সরাসরি আপনার স্ক্রিপ্টে। - mr.spuratic
ব্যবহার usleep @ লুইজ ওয়াজুকেজ এবং @ সেবিক্স লিখেছেন - Ilan.K


জন্য ডকুমেন্টেশন sleep থেকে কমান্ড coreutils বলেছেন:

ঘুমের ঐতিহাসিক বাস্তবায়নের সংখ্যাটি একটি হতে হবে   পূর্ণসংখ্যা, এবং শুধুমাত্র একটি প্রত্যয় ছাড়া একক যুক্তি গ্রহণ।   যাইহোক, জিএনইউ ঘুম ইচ্ছাকৃত ভাসমান বিন্দু সংখ্যা গ্রহণ করে। দেখ    ভাসমান বিন্দু

তাই আপনি ব্যবহার করতে পারেন sleep 0.1, sleep 1.0e-1 এবং অনুরূপ আর্গুমেন্ট।


103
2018-01-15 13:22



Solaris ওএস সম্পর্কে আমার মন্তব্য দেখুন - yael
আপনি মিশ্রিত করেছি হয় এবং নয়? - scai
আমার quastion আমার আপডেট দেখুন - yael
Yael, আমি এখনও আপনার প্রশ্নের এক খুব অনেক নেতিবাচক মনে হয় মনে হয়; আপনি কি নিশ্চিত নন "অবৈধ সিনট্যাক্স নয়"? - MadHatter
উদাহরণস্বরূপ - আমি সৌরজ 10 এ চালাচ্ছি: # ঘুম 0.1 ঘুম: যুক্তিযুক্ত খারাপ চরিত্র, লিনাক্সের ঘুম 0.1 সম্পর্কে জরিমানা কাজ করে - yael


ঘুমের সংখ্যা দশমিক সংখ্যা গ্রহণ করে যাতে আপনি এটির মতো এটি ভাঙ্গতে পারেন:

এক সেকেন্ডের 1/2

 sleep 0.5

এক সেকেন্ডের 1/100

sleep 0.01

তাই একটি মিলিসেকেন্ড জন্য আপনি চান

sleep 0.001

46
2018-01-15 13:24



আপনি দশমিক বিন্দু আগে নেতৃস্থানীয় শূন্য ড্রপ করতে পারেন। যেমন। sleep .5 - Mike Causer
ছাড়া mathforum.org/library/drmath/view/52352.html - stark
একে অপরের সম্পর্কে বলার অপেক্ষা রাখে না ... - Martin


সঠিকতা নির্ধারণ করার জন্য এটি ব্যবহার করে দেখুন:

    time sleep 0.5      # 500 milliseconds (1/2 of a second)
    time sleep 0.001    # 1 millisecond (1/1000 of a second)
    time sleep 1.0      # 1 second (1000 milliseconds)

সমন্বয় mr.spuratic এর সমাধান এবং coles এর সমাধান


11
2018-06-22 19:52





আপনি কেবল ব্যবহার করতে পারেন usleep। এটি প্যারামিটার হিসাবে মাইক্রোসেকেন্ড (= 1e-6 সেকেন্ড) লাগে, তাই আপনি 1 মিলিসেকেন্ড ঘুমাতে পারবেন:

usleep 1000

6
2017-07-08 13:55



$ usleep  No command 'usleep' found, did you mean:  Command 'sleep' from package 'coreutils' (main)  usleep: command not found - Bulletmagnet
না, আমি বলতে চাচ্ছি usleep অংশ initscripts প্যাকেজ যা অন্তত সমস্ত Red Hat derived বিতরণে মানক; অন্ততঃ RHEL, CentOS, ফেডোরা, ম্যাগিয়া / ম্যান্ড্রিক এবং SUSE সহ। এখানে একটি উদাহরণ: `` `` - Luis Vazquez
এখানে CentOS 7 এ চলমান একটি নমুনা ইলাস্ট্রেশন রয়েছে: `` `$ যা ঘুমিয়ে / usr / bin / sleepleep $ rpm -qf / usr / bin / sleepleep initscripts-9.49.37-1.el7_3.1.x86_64` `` সংক্ষিপ্ত করতে : - sleep (থেকে coreutils) সেকেন্ডের সাথে কাজ করে - usleep (থেকে initscripts) মাইক্রো-সেকেন্ডের সাথে কাজ করে - Luis Vazquez


আমি একই সমস্যা (Solaris উপর কোন শেল ঘুমন্ত) ছিল তাই আমি আমার নিজের এইভাবে লিখেছেন:

  #include "stdio.h"
  int main(int argc, char **argv) {
     if(argc == 1) { usleep(atoi(argv[1])); }
     return 0;
}

আর্গুমেন্টগুলি পরীক্ষা করে না - যদি আপনি এটি রাখতে চান তবে আমি সঠিকভাবে লিখিত একটি সুপারিশ করব তবে যেটি (gcc sleepleep.c-sleep ঘুমানো) আপনাকে একটি গর্ত থেকে বের করে দেবে।


3
2018-05-24 15:12



আপনি পারে অন্তত যে বেয়ার পরিবর্তন usleep() ডেকে আনো if(argc == 1) { usleep(atoi(argv[1])); } অ্যারের সীমানা বাইরে ইন্ডেক্সিং এড়াতে, যা অপ্রত্যাশিত আচরণ কোন সংখ্যা হতে পারে। - α CVn