এখানে সমস্যাটি কীভাবে চিহ্নিত হয়েছে তা হ'ল আপনাকে অপেক্ষা করতে হবে যে আপনি আপনার স্ক্রিপ্ট থেকে চালিত প্রোগ্রামগুলি তাদের কাজ শেষ করে।
যদি আপনার স্ক্রিপ্টে আপনি পটভূমিতে প্রোগ্রাম পরিচালনা করেন তবে আপনি আরও কিছু চেষ্টা করতে পারেন।
সাধারণভাবে sync
আপনি প্রস্থান করার আগে একটি কল ফাইল সিস্টেম বাফারগুলি ফ্লাশ করতে দেয় এবং কিছুটা সহায়তা করতে পারে।
যদি স্ক্রিপ্টে আপনি ব্যাকগ্রাউন্ডে কিছু প্রোগ্রাম শুরু করেন ( &
), আপনি স্ক্রিপ্ট থেকে প্রস্থান করার আগে সেগুলি শেষ হওয়ার অপেক্ষা করতে পারেন । এটি কীভাবে কাজ করতে পারে সে সম্পর্কে ধারণা পেতে আপনি নীচে দেখতে পারেন
#!/bin/bash
program_1 &
PID_PROGRAM_1=${!}
program_2 &
wait ${!}
daemon_1 &
program_3 &
PID_PROGRAM_3=${!}
sync
wait $PID_PROGRAM_1
wait $PID_PROGRAM_3
যেহেতু wait
চাকরির পাশাপাশি PID
সংখ্যাগুলির সাথে কাজ করে একটি অলস সমাধান হওয়া উচিত স্ক্রিপ্টের শেষে
for job in `jobs -p`
do
wait $job
done
পরিস্থিতি আরও কঠিন যদি আপনি এমন কিছু রান করেন যা ব্যাকগ্রাউন্ডে অন্য কিছু চালায় কারণ আপনাকে অনুসন্ধান করতে হবে এবং অপেক্ষা করতে হবে (যদি এটি হয় তবে) সমস্ত শিশুর প্রক্রিয়া শেষ : উদাহরণস্বরূপ আপনি যদি কোনও ডিমন চালান তবে সম্ভবত এটি ঘটবে না অপেক্ষা করার জন্য এটি শেষ :-)।
বিঃদ্রঃ:
অপেক্ষা $ {!} এর অর্থ "শেষ পটভূমি প্রক্রিয়াটি শেষ না হওয়া পর্যন্ত অপেক্ষা করুন" যেখানে $!
সর্বশেষ পটভূমি প্রক্রিয়াটির পিআইডি is সুতরাং wait ${!}
ঠিক পরে program_2 &
রাখার সাথে program_2
এটি ব্যাকগ্রাউন্ডে না পাঠিয়ে সরাসরি চালানো সমান equivalent&
এর সহায়তা থেকে wait
:
Syntax
wait [n ...]
Key
n A process ID or a job specification