বাশ স্ক্রিপ্ট থেকে সুন্দরভাবে প্রস্থান করুন


1

আমি এখানে উপস্থাপিত লগিং সলিউশনটি বাস্তবায়ন করছি এবং আমি যখনই প্যারেন্ট বাশ প্রক্রিয়া / স্ক্রিপ্ট থেকে প্রস্থান করি তখনই নিম্নলিখিত লাইনগুলি প্রয়োজন কিনা তা আমি জানি না :

if [ -n "$teepid" ]; then
    exec 1>&- 2>&-  # Close file descriptors to signal EOF to the `tee`
                    # command in the background process
    wait $teepid # Wait for background process to exit
fi

এই লাইনগুলি log()ফাংশনে এবং স্ক্রিপ্টের শেষে পাওয়া যাবে । আমি জানি যে তারা করছি প্রয়োজনীয় মধ্যে log()ফাংশন, কিন্তু তারা হয় প্রয়োজনীয় স্ক্রিপ্ট শেষে?

অন্য কথায়: exitআমার পিতামাতার প্রসেসে প্রতিটি কমান্ডের আগে উল্লিখিত কোডটি না লিখে কি আমার পটভূমি কাজটি সুন্দরভাবে প্রস্থান করবে ?

উত্তর:


1

পিআইডি দ্বারা চিহ্নিত প্রক্রিয়াটি $teepidব্যাকগ্রাউন্ড ব্যবহার করে &। যদি আপনি সেই পিআইডি শেষ না করে অপেক্ষা করে বাইরে বেরোন তবে কেবল খারাপ জিনিসটি ঘটবে যদি আপনি &শেলটি ব্যবহার করেন তবে ঘটবে । [1] {pid} exitedআপনার পরবর্তী প্রম্পট লাইনটি প্রদর্শিত হওয়ার আগে আপনি কোনও কোনও মুহুর্তে [এন্টার] টিপুন এবং একটি (বা অনুরূপ কিছু ঠিক এখনই মনে করতে পারছেন না) বার্তা দিয়ে প্রবেশ করুন।


"যদি আপনি সেই পিআইডি শেষ না করে অপেক্ষা করে বাইরে চলে যান তবে কেবল খারাপ জিনিসই ঘটবে যা আপনি যদি শেল ব্যবহার করেন তবে তা ঘটে" " - এর মানে কি?
ডোর

echo "hello" &শেল প্রম্পট থেকে প্রবেশ করার চেষ্টা করুন , দুবার ENTER টিপুন এবং আপনি কী বলতে চাইছেন তা আপনি দেখতে পাবেন।
লরেন্স

1
দেরিতে দেরিতে আসার জন্য দুঃখিত (এবং অবিশ্রুত), তবে আমি বিশ্বাস করি আপনি ভুল করেছেন। আমার অভিজ্ঞতায়, প্রক্রিয়াগুলি কেবল তাদের নিজস্ব শিশুদের সম্পর্কে সচেতন। যদি কোনও শেল স্ক্রিপ্ট একটি উপ-প্রসেসকে আলাদা করে দেয় তবে স্ক্রিপ্টের প্যারেন্ট প্রসেসটি (সাধারণত একটি ইন্টারেক্টিভ শেল) সেই (সাব) প্রক্রিয়া সম্পর্কে কোনও জ্ঞান রাখে না এবং কখন শেষ হয় তা জানতে পারবে না।
স্কট

1
আপনি এটিকে দ্রুত এবং সহজে টাইপ করে প্রদর্শন করতে পারেন parent (echo "hello" &)প্রথম বন্ধনীগুলি echo "hello" &ব্যাখ্যা করার আগেই একটি নতুন প্রক্রিয়া তৈরি করতে বাধ্য করে এবং তারপরে অবশ্যই এটি অন্য স্তরে একটি প্রক্রিয়া জোর করে –– কোনও স্ক্রিপ্টের প্রারম্ভিক চিত্রটির সিমুলেট করে অ্যাসিনক্রোনাস সাবপ্রসেস। আর একটি ভাল উদাহরণ: (sleep 42 &)এবং তারপরে wait- আপনি তত্ক্ষণাত আপনার শেল প্রম্পটটি ফিরে পাবেন, তবে একটিটি psদেখায় যে এটি sleepএখনও পটভূমিতে রয়েছে।
স্কট

1
সমস্যা / ঝুঁকি, তবে, যদি এই লগিং স্ক্রিপ্টটি teeপ্রক্রিয়াগুলি শেষ হওয়ার জন্য অপেক্ষা না করে , তবে আপনি teeশেষ হওয়ার আগে আপনার শেল প্রম্পটটি ফিরে পেতে পারেন, এবং যাতে আপনি tee(স্ক্রিপ্ট থেকে আউটপুট) থেকে আউটপুট পেতে পারেন শেল প্রম্পট প্রদর্শিত হওয়ার পরে প্রদর্শিত হবে। যদি এটি একটি লাইন বা দুটিরও বেশি হয় তবে ব্যবহারকারীর পক্ষে শেল প্রম্পটটি না দেখা খুব সহজ এবং তাই ধরে নেওয়া যায় যে স্ক্রিপ্টটি এখনও চলছে কিনা, বাস্তবে এটি সম্পন্ন হয়।
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.