উত্তর:
আউটপুট মাধ্যমে সমস্ত প্রক্রিয়া এবং গ্রেপ তালিকাভুক্ত করতে বার বার পিএস চালানোর দরকার নেই। প্রক্রিয়াটি সিটিআরএল-জেডের সাথে প্রেরণ করুন, তারপরে চালান
bg %1 ; wait %1 ; shutdown -h now
আপনার যদি অন্যান্য ব্যাকগ্রাউন্ড জব চালু থাকে তবে সিটিআরএল-জেড করার সময় [1] এর পরিবর্তে আপনাকে একটি আলাদা জবস্পেক দেওয়া হবে। যদি তা হয় তবে পরিবর্তে এটি ব্যবহার করুন।
আপনি এর মতো কিছু করতে পারেন যা প্রতি 5 সেকেন্ডে প্রক্রিয়াটি চলছে কিনা তা পরীক্ষা করে যথাযথ ব্যবস্থা গ্রহণ করবে:
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
grep
অভিব্যক্তিতে বর্গাকার বন্ধনীগুলি নোট করুন । grep
প্রক্রিয়াটি ps
তালিকায় শেষ না হলে এটি মিলছে না তা নিশ্চিত করা । বর্গাকার বন্ধনী সহ যে কোনও একক অক্ষরকে ঘিরে যথেষ্ট।
আমি সব সময় এটা করি।
&&
আদেশটি করতে ভুলে গেছি ।fg && shutdown -h now
:
বিকল্পভাবে, আপনি এই মত অন্যান্য উত্তর হিসাবে পরামর্শ হিসাবে পোল করতে পারেন:
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
আপনি যদি পিডটি জানেন তবে আপনি এটি চালাতে পারেন:
while ps -p $PID; sleep 5; done; shutdown -h now
পিএস থেকে প্রতিধ্বনি ছাড়া চালানোর জন্য এটি করুন:
while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now
এবং শেষ পর্যন্ত কোনও আউটপুট ছাড়াই ব্যাকগ্রাউন্ডে এটি চালানো:
(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &
স্কটের সমাধানটি একটি ভাল তবে এটি grep
ইতিমধ্যে পিডটি জানলে এটি বারবার প্রয়োজনটিকে সরিয়ে দেয় । এবং এটি টাইপ করা অনেক দ্রুত:
উভয় প্রক্রিয়া চালানোর জন্য একটি শেল স্ক্রিপ্ট তৈরি করুন:
MyShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
ডিরেক্টরিটি যেখানে আপনি প্রদত্ত প্রক্রিয়া শুরু করবেন সেখানে সংরক্ষণ করার পরে, একটি করুন:
chmod +x MyShellScript.txt
তারপরে আপনি কমান্ডটি চালাতে চাইলে কেবল টাইপ করুন ./MyShellScript.txt
এবং এটি আপনার জন্য উভয়ই করবে।
&&
পূর্ববর্তী কমান্ডটি সফল হলে কেবল যা ঘটবে তা চলবে। আপনি যদি এটি চালাতে চান তবে এর;
পরিবর্তে কমান্ডটি ব্যর্থ হয়।