বাশ স্ক্রিপ্টটি কেবল এটি শুরু হওয়া অন্য স্ক্রিপ্টের সেই দৃষ্টান্তগুলিকেই মেরে ফেলবে


11

বর্তমান পরিস্থিতিতে, 'কলিং.শ' একটি নির্দিষ্ট স্ক্রিপ্ট পটভূমিতে আরেকটি স্ক্রিপ্ট 'called.sh' প্রবর্তন করে, অন্যান্য ক্রিয়াকলাপ সম্পাদন করে, কিছুক্ষণ ঘুমায়, এবং তারপরে একটি 'কল্ট.শ' বন্ধ করে দেয় pkill called.sh। এটি কাজ করে।

তারপর, আমি করব এছাড়াও লঞ্চ অন্যান্য টার্মিনাল থেকে 'called.sh' পছন্দ একটি স্বতন্ত্র স্ক্রিপ্ট হিসাবে অন্য কোন সময়ে কিনা আগে বা calling.sh চালু করেন। এই স্বাধীন উদাহরণগুলিকে 'কলিং.শ' দ্বারা হত্যা করা উচিত নয়

আমি কীভাবে এটি অর্জন করতে পারি? অন্তর্দৃষ্টি বলছে যে কলিং স্ক্রিপ্টটি ইতিমধ্যে চলমান অন্য কোনও নাম থেকেই শুরু হওয়া প্রক্রিয়াটি বলতে সক্ষম হওয়া উচিত।

বৈকল্পিক হিসাবে, 'কলিং.শ' এছাড়াও 'ডাকা' চালু করতে পারে যা 'called.sh' এর প্রতীকী লিঙ্ক । এই কি উপরোক্ত পরিস্থিতি পরিচালনা জটিল? প্রতীকী লিঙ্কটি ব্যবহার করে কোন নির্দিষ্ট সাবধানতা এবং সমন্বয় প্রয়োজন?


1
আমি বিশ্বাস করি ভাগ করা এই বিশেষভাবে হল: unix.stackexchange.com/a/450242/323121
Rusi

উত্তর:


27

নামটি হত্যা করার জন্য ব্যবহার করবেন না। যেহেতু calling.shস্ক্রিপ্টটি প্রক্রিয়াটিকে আপনি পরে হত্যা করতে চাইছেন, কেবল $!(থেকে man bash) ব্যবহার করুন :

! অ্যাসিঙ্ক্রোনাস কমান্ড হিসাবে নির্বাহ করা হয়েছে বা bgবিল্টিন ব্যবহার করা সত্ত্বেও, পটভূমিতে সজ্জিত কাজের প্রসেস আইডিতে প্রসারিত হয়

সুতরাং, আপনি যদি calling.shএই মত হন:

called.sh &
## do stuff
pkill called.sh

এটিতে এটি পরিবর্তন করুন:

called.sh &
calledPid=$!
# do stuff
kill "$calledPid"

4
এটি যতক্ষণ না ডেকে ডাকা হয় ততক্ষণ কাজ করা উচিত sh
ইউজিন রায়বতসেভ

2
@ ইউজিনিআরবটসেভ এটি একটি খুব ভাল বিষয়। আমি অনুমান করি আপনি এটিও পরীক্ষা করে দেখতে পারেন যে $calledPidএর পিতামাতার পিআইডি হল পিআইডি called.sh
টেরডন

উত্তরটিকে শক্তিশালী করার জন্য, এটি আমার মতামতগুলি
জ্যাভিয়ারস্টুউ

18

আমি এটিকে বাছতে হয়েছিল তবে অনেক বার স্ক্রিপ্ট থেকে বেরিয়েছি; যখন স্ক্রিপ্টগুলিকে একটি জটিল স্বয়ংক্রিয় সময়সূচীর অংশ হিসাবে ডাকা হয় তখন এটি আরও মজাদার। pkillকোন স্ক্রিপ্টটি মারতে হবে তা বেছে নেওয়ার মতো আপনার এমন কিছুর উপর নির্ভর করা উচিত নয় ।

কলিং.শনের অভ্যন্তরে আপনার শুরু করা চাকরিগুলির পিআইডি রেকর্ড করা উচিত এবং পিআইডি দ্বারা তাদের স্পষ্টভাবে হত্যা করা উচিত।

ভিতরে কলিং.শ:

./called.sh &
called_pid=$!

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