প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা করুন


147

কোনও প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা করার জন্য বাশের কোনও বিল্টিন বৈশিষ্ট্য রয়েছে কি?

waitকমান্ড শুধুমাত্র একটি শেষ পর্যন্ত সন্তানের প্রসেসের জন্য অপেক্ষা করতে পারেন। আমি জানতে চাই যে কোনও স্ক্রিপ্টে এগিয়ে যাওয়ার আগে কোনও প্রক্রিয়া শেষ হওয়ার অপেক্ষা করার কোনও উপায় আছে কিনা।

এটি করার একটি যান্ত্রিক উপায় নিম্নরূপে তবে আমি জানতে চাই যে বাশের কোনও বিল্টিন বৈশিষ্ট্য রয়েছে কিনা।

while ps -p `cat $PID_FILE` > /dev/null; do sleep 1; done

4
আমাকে দিতে যাক দুই সতর্কতা : 1. হিসাবে নিচে নির্দিষ্ট দ্বারা mp3foley , "হত্যা -0" সবসময় কাজ POSIX জন্য আছে। ২. সম্ভবত আপনি এটিও নিশ্চিত করতে চান যে প্রক্রিয়াটি কোনও জম্বি নয়, যা কার্যত একটি সমাপ্ত প্রক্রিয়া। দেখুন mp3foley এর মন্তব্য এবং খনি বিস্তারিত জানার জন্য।
টিকা কাজুরা

2
আরেকটি সাবধানতা ( মূলত নির্দিষ্ট দ্বারা ks1322 নীচে): PID, একটি শিশু প্রক্রিয়া ছাড়া অন্য ব্যবহার শক্তসমর্থ নয়। আপনি যদি কোনও নিরাপদ উপায় চান তবে আইপিসি ব্যবহার করুন।
টিকা কাজুরা

উত্তর:


138

কোনও প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা করা

লিনাক্স:

tail --pid=$pid -f /dev/null

ডারউইনের (এটিতে $pidখোলা ফাইল রয়েছে):

lsof -p $pid +r 1 &>/dev/null

সময়সীমা (সেকেন্ড) সহ

লিনাক্স:

timeout $timeout tail --pid=$pid -f /dev/null

ডারউইনের (এটিতে $pidখোলা ফাইল রয়েছে):

lsof -p $pid +r 1m%s -t | grep -qm1 $(date -v+${timeout}S +%s 2>/dev/null || echo INF)

42
কে জানত যে tailএই কাজ করবে।
ctrl-alt-delor 15

8
tailkill(pid, SIG_0)একটি প্রক্রিয়াতে ভোট দিয়ে হুডের নীচে কাজ করে (ব্যবহার করে আবিষ্কার করা হয়েছে strace)।
এট রিগ

2
নোট করুন যে lsof ভোটদান ব্যবহার করে, +r 1এটি সময়সীমা, আমি ব্যক্তিগতভাবে ম্যাকওএসের জন্য এমন কোনও সমাধান খুঁজছি যা পোলিং ব্যবহার করে না।
আলেকজান্ডার মিলস

1
এই কৌশলটি জম্বিদের জন্য ব্যর্থ । আপনি যে প্রক্রিয়াগুলি হত্যা করতে পারবেন না এটি ঠিক; tailলাইন আছে kill (pid, 0) != 0 && errno != EPERM
টিকা কাজুরা

2
@ আলেকজান্ডারমিলস, আপনি যদি কমান্ড কার্যকর করার সাথে সাথে আপনার ম্যাকোস সিস্টেমটি ঘুমাতে না পারাকে সহ্য করতে পারেন caffeinate -w $pidতবে কৌশলটি কার্যকর করবে।
zenak

83

কোন বিল্টিন নেই। ব্যবহার করুন kill -0একটি কার্যকর সমাধান জন্য একটি লুপ মধ্যে:

anywait(){

    for pid in "$@"; do
        while kill -0 "$pid"; do
            sleep 0.5
        done
    done
}

অথবা সহজ এক সময় ব্যবহারের জন্য সহজ অনেলাইনার হিসাবে:

while kill -0 PIDS 2> /dev/null; do sleep 1; done;

বেশ কয়েকটি ভাষ্যকার দ্বারা উল্লিখিত হিসাবে, আপনি যদি এমন প্রক্রিয়াগুলির জন্য অপেক্ষা করতে চান যেগুলিতে আপনাকে সিগন্যাল প্রেরণের সুযোগ নেই তবে আপনি kill -0 $pidকলটি প্রতিস্থাপনের জন্য প্রক্রিয়াটি চলছে কিনা তা সনাক্ত করার জন্য অন্য কোনও উপায় খুঁজে বের করতে পারেন । লিনাক্সে, test -d "/proc/$pid"কাজ করে, অন্যান্য সিস্টেমে আপনাকে ব্যবহার করতে হতে পারে pgrep(উপলভ্য থাকলে) বা এর মতো কিছু ps | grep "^$pid "


2
সতর্ক : এই সবসময় কাজ করে না, যেমন নিচের সরু আউট দ্বারা mp3foley । বিস্তারিত জানার জন্য মন্তব্য এবং আমার দেখুন।
টিকা কাজুরা

2
সাবধানতা ২ (জম্বিগুলিতে): উপরে টেডি দ্বারা অনুসরণ করা মন্তব্যটি এখনও যথেষ্ট নয়, কারণ তারা জম্বি হতে পারে। লিনাক্স সমাধানের জন্য আমার উত্তরটি নীচে দেখুন ।
টিকা কাজুরা

4
এই সমাধানটি কোনও জাতি শর্তের ঝুঁকিপূর্ণ নয়? ঘুমানোর সময় sleep 0.5, সহ প্রক্রিয়াটি $pidমারা যেতে পারে এবং একই সাথে অন্য একটি প্রক্রিয়া তৈরি হতে পারে $pid। এবং আমরা একই সাথে 2 টি পৃথক প্রক্রিয়া (বা আরও বেশি) জন্য অপেক্ষা করব $pid
ks1322

2
@ ks1322 হ্যাঁ, এই কোডটিতে অবশ্যই রেসের শর্ত রয়েছে।
টেডি

4
পিআইডিগুলি সাধারণত ক্রমান্বয়ে উত্পন্ন হয় না? এক সেকেন্ডের মধ্যে মোড়কের গণনার সমানতা কী?
esmiralha

53

আমি দেখতে পেয়েছি "কিল -0" কাজ করে না যদি প্রক্রিয়াটি রুট (বা অন্য) এর মালিকানাধীন থাকে, তাই আমি পিজ্রিপ ব্যবহার করেছি এবং সাথে এসেছি:

while pgrep -u root process_name > /dev/null; do sleep 1; done

এটির সাথে সম্ভবত মিলবে জম্বি প্রক্রিয়াগুলির অসুবিধা হবে।


2
ভাল পর্যবেক্ষণ। পসিক্সে, kill(pid, sig=0)কলার প্রক্রিয়াটি হত্যার সুযোগ না পেলে সিস্টেম কল ব্যর্থ হয়। সুতরাং / বিন / কিল -0 এবং "কিল -0" (বাশ অন্তর্নির্মিত) একই শর্তে ব্যর্থ হয়।
টিকা কাজুরা

31

প্রক্রিয়াটি বিদ্যমান না থাকলে বা এটি একটি জম্বি হয় তবে এই ব্যাশ স্ক্রিপ্ট লুপটি শেষ হয়।

PID=<pid to watch>
while s=`ps -p $PID -o s=` && [[ "$s" && "$s" != 'Z' ]]; do
    sleep 1
done

সম্পাদনা : উপরে স্ক্রিপ্ট নিচে দেওয়া হল দ্বারা Rockallite । ধন্যবাদ!

লিনাক্সের জন্য কাজ নীচের আমার Orignal উত্তর, উপর নির্ভর procfsঅর্থাত /proc/। আমি এর বহনযোগ্যতা জানি না:

while [[ ( -d /proc/$PID ) && ( -z `grep zombie /proc/$PID/status` ) ]]; do
    sleep 1
done

এটি শেলের মধ্যেই সীমাবদ্ধ নয়, তবে অপ্র-সন্তানের প্রক্রিয়া সমাপ্তি দেখার জন্য ওএসের নিজস্ব সিস্টেম কল নেই।


1
সুন্দর. যদিও আমাকে grep /proc/$PID/statusডাবল কোট ( bash: test: argument expected)
গ্রিডো

হুম ... এটি আবার চেষ্টা করে দেখে কাজ হয়েছে। আমার ধারণা গতবার আমি কিছু ভুল করেছি wrong
গ্রিডো

7
বাwhile s=`ps -p $PID -o s=` && [[ "$s" && "$s" != 'Z' ]]; do sleep 1; done
রক্যালাইট

1
দুর্ভাগ্যবশত, এই busybox কাজ করে না - তার মধ্যে ps, তন্ন তন্ন -pবা s=সমর্থিত
ZimbiX

14

ফ্রিবিএসডি এবং সোলারিসের এই সুবিধাজনক pwait(1)উপযোগিতা রয়েছে যা সঠিকভাবে, আপনি যা চান তা করে does

আমি বিশ্বাস করি, অন্যান্য আধুনিক ওএসেরও প্রয়োজনীয় সিস্টেম কল রয়েছে (ম্যাকোস, উদাহরণস্বরূপ, বিএসডি'র প্রয়োগ করে kqueue), তবে এটি সমস্ত কমান্ড-লাইন থেকে উপলব্ধ করে না।


2
> BSD and Solaris: মাথায় আসা তিনটি বড় বিএসডি পরিদর্শন; তন্ন তন্ন OpenBSD কিংবা NetBSD বা শুধু FreeBSD 'র আছে, যেমন আপনি সহজেই যাচাই করতে পারেন এই ফাংশন (তাদের মানুষ পাতায়) থাকতে man.openbsd.org
benaryorg

আপনার ঠিক মত বলে মনে হচ্ছে। আমার কুলপা ... তারা সবাই বাস্তবায়ন করে kqueue, তাই ফ্রিবিএসডি সংকলন pwait(1)করা তুচ্ছ হবে। অন্য বিএসডি আমদানি করা বৈশিষ্ট্যটি কেন আমার হাত থেকে বাঁচবে না ...
মিখাইল টি।

1
plink me@oracle box -pw redacted "pwait 6998";email -b -s "It's done" etcএখন থেকে কয়েক ঘন্টার পরিবর্তে আমাকে এখনই বাড়িতে যাওয়ার অনুমতি দিয়েছে।
zzxyz

11

বাশ ম্যানপেজ থেকে

   wait [n ...]
          Wait for each specified process and return its termination  status
          Each  n  may be a process ID or a job specification; if a
          job spec is given, all processes  in  that  job's  pipeline  are
          waited  for.  If n is not given, all currently active child processes
          are waited for, and the return  status  is  zero.   If  n
          specifies  a  non-existent  process or job, the return status is
          127.  Otherwise, the return status is the  exit  status  of  the
          last process or job waited for.

56
এটি সত্য তবে এটি কেবল বর্তমান শেলের সন্তানের জন্য অপেক্ষা করতে পারে। আপনি কোনও প্রক্রিয়ার জন্য অপেক্ষা করতে পারবেন না ।
গুমিক

@ গুমিক: "যদি এন দেওয়া না হয় তবে বর্তমানে সক্রিয় সমস্ত শিশু প্রক্রিয়াগুলির জন্য অপেক্ষা করা হচ্ছে" । এটি নিখুঁতভাবে কাজ করে .. কোনও বাচ্চা প্রক্রিয়া শেষ waitনা হওয়া অবধি আরগগুলি প্রক্রিয়াটিকে অবরুদ্ধ করে দেবে । সত্যি বলতে, আমি যেহেতু সর্বদা ব্যবস্থাপনার কাজ চলছে তাই কোনও প্রক্রিয়ার জন্য অপেক্ষা করার কোনও বিন্দু দেখতে পাচ্ছি না।
কোডারোফসালভেশন

1
@ কোডারফসালভেশন (ঘুম 10 এবং ঘুম 3 এবং অপেক্ষা করুন) ফিরে আসতে 10 সেকেন্ড সময় নেয়: সমস্ত শিশু প্রক্রিয়া শেষ না হওয়া পর্যন্ত আরগগুলি ছাড়াই অপেক্ষা করা অবরুদ্ধ হবে। প্রথম সন্তানের (বা মনোনীত) প্রক্রিয়া শেষ হলে ওপি অবহিত হতে চায়।
android.weasel

প্রক্রিয়াটি ব্যাকগ্রাউন্ড বা অগ্রভূমি না থাকলেও কাজ করে না (সোলারিস, লিনাক্স বা সাইগউইনে)। প্রাক্তন। sleep 1000 ctrl-z wait [sleep pid]অবিলম্বে ফিরে আসে
zzxyz

6

এই সমস্ত সমাধানগুলি উবুন্টু 14.04 এ পরীক্ষা করা হয়েছে:

সমাধান 1 (পিএস কমান্ড ব্যবহার করে): কেবল পিয়ার্স উত্তর যুক্ত করতে, আমি পরামর্শ দেব:

while ps axg | grep -vw grep | grep -w process_name > /dev/null; do sleep 1; done

এই ক্ষেত্রে, grep -vw grepনিশ্চিত করে যে গ্রেপ শুধুমাত্র প্রক্রিয়া_নামের সাথে মেলে এবং গ্রেপ নিজেই নয়। প্রক্রিয়া_নাম কোনও লাইনের শেষে নয় এমন ক্ষেত্রেগুলিকে সমর্থন করার সুবিধা রয়েছে ps axg

সমাধান 2 (শীর্ষ কমান্ড এবং প্রক্রিয়া নাম ব্যবহার করে):

while [[ $(awk '$12=="process_name" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done

process_nameউপস্থিত প্রক্রিয়া নামটি প্রতিস্থাপন করুন top -n 1 -b। উদ্ধৃতি চিহ্ন রাখুন দয়া করে।

আপনি যে প্রক্রিয়াগুলির সমাপ্তির জন্য অপেক্ষা করছেন তার তালিকা দেখতে আপনি চালাতে পারেন:

while : ; do p=$(awk '$12=="process_name" {print $0}' <(top -n 1 -b)); [[ $b ]] || break; echo $p; sleep 1; done

সমাধান 3 (শীর্ষ কমান্ড এবং প্রক্রিয়া আইডি ব্যবহার করে):

while [[ $(awk '$1=="process_id" {print $0}' <(top -n 1 -b)) ]]; do sleep 1; done

process_idআপনার প্রোগ্রামটির প্রসেস আইডি দিয়ে প্রতিস্থাপন করুন ।


4
ডাউনভোট: দীর্ঘ grep -v grepপাইপলাইনটি একটি বিশাল অ্যান্টিপ্যাটার্ন এবং এটি অনুমান করে যে আপনার একই নামের সাথে সম্পর্কযুক্ত প্রক্রিয়া নেই। আপনি যদি এর পরিবর্তে পিআইডিগুলি জানেন তবে এটি একটি সঠিকভাবে কাজের সমাধানের সাথে মানিয়ে নেওয়া যেতে পারে।
ট্রিপলি

মন্তব্যের জন্য ট্রিপলিকে ধন্যবাদ। কিছুটা-w সমস্যা এড়াতে আমি পতাকা যুক্ত করেছি । আমি আপনার মন্তব্যের ভিত্তিতে আরও দুটি সমাধান যুক্ত করেছি। grep -v grep
সাইদ বিকে

5

ঠিক আছে, সুতরাং মনে হচ্ছে উত্তরটি হ'ল - না, সরঞ্জামটিতে কোনও বিল্ট নেই।

সেট /proc/sys/kernel/yama/ptrace_scopeকরার পরে 0, straceপ্রোগ্রামটি ব্যবহার করা সম্ভব । আরও স্যুইচগুলি এটিকে নিঃশব্দ করার জন্য ব্যবহার করা যেতে পারে, যাতে এটি সত্যই প্যাসিভ অপেক্ষা করে:

strace -qqe '' -p <PID>

1
সুন্দর! যদিও মনে হচ্ছে দুটি পৃথক জায়গা থেকে প্রদত্ত পিআইডি সংযুক্ত করা সম্ভব নয় (আমি Operation not permittedদ্বিতীয় স্ট্রেসের উদাহরণটি পেয়েছি ); আপনি কি তা নিশ্চিত করতে পারেন?
eudoxos

@ ইউডোকোসস হ্যাঁ, পিট্রেসের ম্যানপেজটি বলেছেন: (...)"tracee" always means "(one) thread"(এবং আপনি যে ত্রুটিটি উল্লেখ করেছেন তা আমি নিশ্চিত করি)। আরও প্রক্রিয়াগুলিকে এভাবে অপেক্ষা করার জন্য আপনাকে একটি চেইন তৈরি করতে হবে।
ইমু

2

ব্লকিং সমাধান

ব্যবহার করুন waitসকল প্রক্রিয়ার বিনষ্ট জন্য একটি লুপ, ওয়েটিং জন্য:

function anywait()
{

    for pid in "$@"
    do
        wait $pid
        echo "Process $pid terminated"
    done
    echo 'All processes terminated'
}

এই প্রক্রিয়াটি তাত্ক্ষণিকভাবে প্রস্থান করা হবে, যখন সমস্ত প্রক্রিয়া বন্ধ হয়ে গেল। এটি সর্বাধিক দক্ষ সমাধান।

অ-ব্লকিং সমাধান

kill -0সমস্ত প্রক্রিয়া সমাপ্ত করার জন্য অপেক্ষা করার জন্য, লুপটিতে ব্যবহার করুন + চেকগুলির মধ্যে কিছু করুন:

function anywait_w_status()
{
    for pid in "$@"
    do
        while kill -0 "$pid"
        do
            echo "Process $pid still running..."
            sleep 1
        done
    done
    echo 'All processes terminated'
}

প্রতিক্রিয়া সময় সময়ে হ্রাস পেয়েছে sleep, কারণ উচ্চ সিপিইউ ব্যবহার আটকাতে হবে।

একটি বাস্তবসম্মত ব্যবহার:

সমস্ত প্রক্রিয়া সমাপ্ত হওয়ার জন্য অপেক্ষা করছে + ব্যবহারকারীদের সমস্ত চলমান পিআইডি সম্পর্কে অবহিত করুন ।

function anywait_w_status2()
{
    while true
    do
        alive_pids=()
        for pid in "$@"
        do
            kill -0 "$pid" 2>/dev/null \
                && alive_pids+="$pid "
        done

        if [ ${#alive_pids[@]} -eq 0 ]
        then
            break
        fi

        echo "Process(es) still running... ${alive_pids[@]}"
        sleep 1
    done
    echo 'All processes terminated'
}

মন্তব্য

এই ফাংশনগুলি $@BASH অ্যারে হিসাবে আর্গুমেন্টের মাধ্যমে পিআইডি পাচ্ছে ।


2

একই সমস্যাটি ছিল, আমি প্রক্রিয়াটি হত্যার সমস্যাটি সমাধান করেছি এবং তারপরে প্রতিটি প্রক্রিয়াটি PROC ফাইল সিস্টেম ব্যবহার করে শেষ করার জন্য অপেক্ষা করছি:

while [ -e /proc/${pid} ]; do sleep 0.1; done

ভোটগ্রহণ খুব খারাপ, আপনি পুলিশের কাছ থেকে একটি দর্শন পেতে পারেন :)
আলেকজান্ডার মিলস

2

কোনও প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা করার জন্য কোনও বিল্টিন বৈশিষ্ট্য নেই।

kill -0পাওয়া পাওয়া যে কোনও পিআইডিতে আপনি প্রেরণ করতে পারেন, সুতরাং জম্বি এবং স্টাফগুলি দেখে এখনও আপনি বিস্মিত হবেন না ps(এখনও পিআইডি তালিকাটি ব্যবহার করে পুনরুদ্ধার করার সময় ps)।


1

আপনার প্রক্রিয়াটি শেষ হয়ে গেলে বন্ধ হয়ে যাওয়া কিছু ফাইল নিরীক্ষণের জন্য ইনোটাইফাইট ব্যবহার করুন। উদাহরণ (লিনাক্সে):

yourproc >logfile.log & disown
inotifywait -q -e close logfile.log

-আমরা অপেক্ষা করার জন্য ইভেন্টটি নির্দিষ্ট করে, -কি মানে কেবলমাত্র সমাপ্তিতে ন্যূনতম আউটপুট। এক্ষেত্রে এটি হবে:

logfile.log CLOSE_WRITE,CLOSE

একাধিক প্রক্রিয়া অপেক্ষা করার জন্য একটি একক অপেক্ষা কমান্ড ব্যবহার করা যেতে পারে:

yourproc1 >logfile1.log & disown
yourproc2 >logfile2.log & disown
yourproc3 >logfile3.log & disown
inotifywait -q -e close logfile1.log logfile2.log logfile3.log

ইনোটিফাইয়েটের আউটপুট স্ট্রিং আপনাকে জানাবে, কোন প্রক্রিয়াটি শেষ হয়েছে। এটি কেবল 'প্রকৃত' ফাইলগুলির সাথে কাজ করে, / প্রোকে / তে কোনও কিছুর সাথে নয়


0

ওএসএক্সের মতো সিস্টেমে আপনার পিগ্রেপ নাও থাকতে পারে যাতে নাম অনুসারে প্রক্রিয়াগুলি অনুসন্ধান করার সময় আপনি এই কৌশলটি ব্যবহার করতে পারেন:

while ps axg | grep process_name$ > /dev/null; do sleep 1; done

$প্রক্রিয়া নাম নিশ্চিত শেষে প্রতীক, grep ম্যাচ শুধুমাত্র PS আউটপুটে লাইনের শেষে এবং নিজেকে না process_name পারে।


ভয়াবহ: কমান্ড লাইনের কোথাও name নামের সাথে একাধিক প্রক্রিয়া থাকতে পারে , আপনার নিজস্ব গ্রেপ অন্তর্ভুক্ত রয়েছে। পরিবর্তে পুনঃনির্দেশিত এর /dev/null, -qসঙ্গে ব্যবহার করা উচিত grep। আপনার লুপটি ঘুমন্ত অবস্থায় প্রক্রিয়াটির আর একটি উদাহরণ শুরু হতে পারে এবং আপনি কখনই জানতে পারবেন না ...
মিখাইল টি।

আমি নিশ্চিত নই যে আপনি কেন এই উত্তরটিকে 'ভয়াবহ' হিসাবে প্রকাশ করেছেন - অন্যরা যেমন অনুরূপ পদ্ধতির পরামর্শ দিয়েছিল? যতক্ষণ -qআমি আমার উত্তর উল্লেখিত বিশেষভাবে সসীম প্রস্তাব, বৈধ $উপায়ে, grep নাম "কমান্ড লাইন কোথাও" মেলে না হবে না এটা নিজেই ম্যাচ হবে। আপনি কি ওএসএক্স এ চেষ্টা করেছেন?
পিয়ার্জ

0

রুনো পালোসারি এর সমাধানটির জন্য Timeout in Seconds Darwin, ইউএনআইএক্স -এর মতো ওএসের জন্য জিএনইউ নেই tail(এটি নির্দিষ্ট নয় Darwin) এর জন্য এটি একটি দুর্দান্ত কাজ ar তবে, ইউএনআইএক্স-এর মতো অপারেটিং সিস্টেমের বয়সের উপর নির্ভর করে প্রদত্ত কমান্ড-লাইন প্রয়োজনীয়তার চেয়ে জটিল এবং ব্যর্থ হতে পারে:

lsof -p $pid +r 1m%s -t | grep -qm1 $(date -v+${timeout}S +%s 2>/dev/null || echo INF)

কমপক্ষে একটি পুরানো ইউএনআইএক্স-তে, lsofযুক্তিটি +r 1m%sব্যর্থ হয় (এমনকি কোনও সুপারভাইজারের জন্যও):

lsof: can't read kernel name list.

m%sএকটি আউটপুট ফরম্যাট স্পেসিফিকেশন হয়। একটি সহজ পোস্ট প্রসেসরের এটির প্রয়োজন হয় না। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি পাঁচ সেকেন্ড পর্যন্ত পিআইডি 5959 এ অপেক্ষা করে:

lsof -p 5959 +r 1 | awk '/^=/ { if (T++ >= 5) { exit 1 } }'

এই উদাহরণে, পিআইডি 5959 পাঁচ সেকেন্ড সময় পার হওয়ার আগে যদি তার নিজস্ব চুক্তি থেকে প্রস্থান হয়, ${?}হয় 0। পাঁচ সেকেন্ড পরে ${?}ফিরে না আসলে 1

এটি স্পষ্টভাবে লক্ষ করার মতো হতে পারে যে +r 1এটি 1হচ্ছে পোল ব্যবধান (সেকেন্ডের মধ্যে), সুতরাং এটি পরিস্থিতি অনুসারে পরিবর্তন করা যেতে পারে।

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