বিশুদ্ধ bash
সালে নির্মিত ছাড়া coreutils
আমি দেখতে পেয়েছি যে এই সমাধানটি কোনও বহিরাগত এক্সিকিউটেবলকে কল না করে বিল্ট-ইন কমান্ডের bash
উপর নির্ভর করতে কাজ করে । এটি এমন সিস্টেমে কাজ করে যেখানে শেষ পর্যন্ত এমনকি কোরিউটিলগুলি ইনস্টল করা হয় না [ 1 ]
YourCommand & read -t 300 ; kill $! # 1st version
YourCommand & read -t 300 || kill $! # 2nd version
ব্যাখ্যা : যথারীতি যখন আপনি একটি কমান্ড মাধ্যমে ব্যাকগ্রাউন্ডে পাঠাতে &
, তার PID, অভ্যন্তরীণ পরিবর্তনশীল মধ্যে সংরক্ষিত হয় $!
(এর আধুনিক সংস্করণ উপস্থিত dash
, csh
, bash
, tcsh
, zsh
...)।
শাঁসের মধ্যে সত্যই কী পার্থক্য তৈরি করে তা হ'ল বিল্ট-ইন কমান্ড read
[ 2 ] এবং বিকল্পের উপস্থিতি -t
। 1 ম সংস্করণে যদি ব্যবহারকারী নির্দিষ্ট পরিমাণ সেকেন্ডের আগে ইনপুট একটি লাইন সম্পূর্ণ না করে নির্দেশটি শেষ হবে এবং ত্রুটি রিটার্ন কোড উত্পন্ন হবে।
- TIMEOUT সময়সীমা পড়ার কারণ এবং ব্যর্থতা ফিরে আসার কারণ যদি TIMEOUT সেকেন্ডের মধ্যে সম্পূর্ণ লাইন ইনপুটটি না পড়ে থাকে।
দ্বিতীয় সংস্করণ 1 ম হিসাবে কাজ করে তবে আপনি কেবল টিপে হত্যার সময়সীমা বাতিল করতে পারেন enter।
প্রকৃতপক্ষে অপারেটর বিবৃতিটি কেবল তখনই ||
সম্পাদন করে kill
যদি read
কমান্ডটি শূন্য থেকে আলাদা কোনও রিটার্ন কোড সহ প্রস্থান করে, সময়সীমার মেয়াদ শেষ হওয়ার সাথে সাথে। আপনি যদি enterএই মুহুর্তের আগে টিপেন, এটি 0 ফিরে আসবে এবং এটি আপনার পূর্ববর্তী আদেশটি হত্যা করবে না।
কোরিটিলস দ্রবণগুলি [ 1 ]
যখন কোরিউটিলগুলি আপনার সিস্টেমে উপস্থিত থাকে এবং আপনার কোনও বাহ্যিক প্রোগ্রাম কল করার জন্য সময় এবং সংস্থানগুলি সাশ্রয় করার প্রয়োজন হয় না timeout
এবং sleep
এবং আপনার লক্ষ্যে পৌঁছানোর উভয়ই সঠিক উপায়।
timeout
এর ব্যবহার timeout
সোজা।
অবশেষে আপনি -k
যদি প্রথম ব্যর্থ হন তবে অতিরিক্ত কিল সংকেত প্রেরণের বিকল্পটিও বিবেচনা করতে পারেন ।
timeout 5m YourCommand # 3rd version
sleep
সঙ্গে sleep
আপনি আপনার কল্পনা ব্যবহার করুন অথবা কিছু অনুপ্রেরণা নিতে পারেন [ 3 ] । নোট করুন যে আপনি আপনার কমান্ডটি পটভূমিতে বা অগ্রভাগে রেখে যেতে পারেন (উদাহরণস্বরূপ top
সাধারণত অগ্রভাগে থাকা প্রয়োজন)।
YourCommand & sleep 5m; kill $! # 4th Background
YourCommand & pid=$! ; (sleep 5m; kill $pid;) & # 5th Background
bash -c '(sleep 5m; kill $$) & exec YourCommand' # 6th Foreground
(cmdpid=$BASHPID; (sleep 5m; kill $cmdpid) & exec YourCommand) # 7th Foreground
ব্যাখ্যা
- চতুর্থ সংস্করণে আপনি ব্যাকগ্রাউন্ডে চালিত করেন
YourCommand
তারপরে আপনার শেলটি sleep
5 মিনিটের জন্য। এটি শেষ হয়ে গেলে শেষ পটভূমি প্রক্রিয়াটি ( $!
) নিহত হবে। আপনি আপনার খোল থামান।
-
পরিবর্তে 5 তম সংস্করণে আপনি ব্যাকগ্রাউন্ডে চালিত করেন
YourCommand
এবং আপনি তত্ক্ষণাত সেই পিআইডিটি ভেরিয়েবলে সঞ্চয় করেন $pid
। তারপরে আপনি ব্যাকগ্রাউন্ডে 5 মিনিটের জন্য একটি ন্যাপ এবং তার ফলস্বরূপ কমান্ড কার্যকর করেন যা এই সঞ্চিত পিআইডিকে হত্যা করবে। যেহেতু আপনি পটভূমিতে এই গোষ্ঠীটির আদেশগুলি পাঠিয়েছেন আপনি নিজের শেলটি থামান না। আপনাকে একটি ভেরিয়েবলে পিআইডি সংরক্ষণ $!
করতে হবে কারণ এর মানটি ব্যাকগ্রাউন্ডে অন্য কোনও প্রোগ্রামের পরিণামে আপডেট করা যেতে পারে। সহজ কথায় আপনি ভুল প্রক্রিয়া বা কোনও প্রক্রিয়া মোটেই ঝুঁকি এড়াতে পারবেন ।
- । ষ্ঠ সংস্করণে এটি একটি নতুন বাশ শেল নামে পরিচিত যা minutes মিনিটের মধ্যে নিজেই আত্মহত্যা করবে
$$
, তারপরে এটি আপনার আদেশটি কার্যকর করা হবে যা পূর্বের অংশে থেকে যায়।
- 7th ম সংস্করণে এটি এমন একটি সাবশেল আহ্বান করা হয়েছে
()
যা তার পিআইডি একটি ভেরিয়েবল ( cmdpid
) এ সঞ্চয় করে এবং ব্যাকগ্রাউন্ড এক্সিকিউশনে প্রেরিত অন্য সাবশেলের সাহায্যে নিজেকে মেরে ফেলে, তারপরে আপনার কম্যান্ডটি অগ্রভাগে চালায়।
অবশ্যই প্রত্যেকটি সংস্করণ আপনি হত্যার সংকেত আপনি প্রয়োজন পাঠাতে পারেন ডিফল্ট এক থেকে চরম kill -9
, শুধুমাত্র ব্যবহার করা হবে যখন সত্যিই প্রয়োজন ছিল।
তথ্যসূত্র
- [ 1 ] কোরিটিলস
- [ 2 ] বাশ শুরুর গাইড
- [ 3 ] বাশফাক্স