উত্তর:
আমি শুরু করেছি
while true; do yad; sleep 60; done &
এবং এটি পরীক্ষা করার জন্য টার্মিনালটি বন্ধ করে দিয়েছি, এখন আমারও একই সমস্যা হয়েছে।
আসুন চলমান প্রসেসগুলির সাথে ps fjx
আমার মেশিনের শেষ লাইনগুলি পড়ার একটি সংক্ষিপ্তসার পেতে পারি
2226 11606 11606 19337 ? -1 S 1000 0:00 \_ /bin/bash
11606 22485 11606 19337 ? -1 S 1000 0:00 | \_ sleep 10
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
1 2215 2215 2215 ? -1 Ss 1000 0:00 /lib/systemd/systemd --user
2215 2216 2215 2215 ? -1 S 1000 0:00 \_ (sd-pam)
আপনি যদি এটি বন্ধ করি তবে এটির আউটপুটে পরিবর্তিত হয় তবে আপনি এটির yad
একটি সাবপ্রসেস হিসাবে দেখতে পারেন । যদি গাছের ভিউটি খুব বিভ্রান্ত হয় তবে আপনি আউটপুটটি নিম্নলিখিত 1 অনুসারে অনুসন্ধান করতে পারেন :/bin/bash
yad
sleep 60
ps
ps fjx | grep "[y]ad" # or respectively
ps fjx | grep "[s]leep 60"
আউটপুট লাইন দুটি সংখ্যার সাথে শুরু হয়, প্রথমটি হ'ল পিপিআইডি, প্যারেন্ট প্রসেসের প্রক্রিয়া আইডি এবং দ্বিতীয়টি পিআইডি, প্রক্রিয়ার নিজেই আইডি। এটি 9411
এখানে উভয় সারিতে উপস্থিত হওয়ার কারণে :
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
এটি bash
আমরা যে সাবশেলটিকে হত্যা করতে চাই এবং এটির পিআইডি আমরা সবেমাত্র খুঁজে পেয়েছি তাই এখন যা অবশিষ্ট রয়েছে তা সরল
kill 9411 # replace 9411 with the PID you found out!
এবং বিরক্তিকর সাবশেল ভাল হয়ে গেছে।
1 : grep "[y]ad"
পরিবর্তে স্বরলিপিটি কেবল প্রক্রিয়াটিকে ফলাফলের তালিকায় প্রদর্শিত হতে grep yad
বাধা দেয় grep
।
bash
ভেরিয়েবল সরবরাহ করে $!
, যা "সাম্প্রতিককালে ব্যাকগ্রাউন্ডে রেখে দেওয়া কাজের প্রসেস আইডিতে প্রসারিত হয়", সুতরাং নিম্নলিখিতটি ব্যাকগ্রাউন্ডের সর্বশেষ প্রক্রিয়াটিকে হত্যা করে:
kill $!
এটি যদি সর্বশেষ প্রক্রিয়া না হয় তবে কেবল jobs
বিল্টিনের সাথে চলমান কাজের তালিকার একটি উদাহরণ পেতে পারেন , উদাহরণস্বরূপ আউটপুট:
[1]- Running while true; do
yad; sleep 60;
done &
[2]+ Stopped sleep 10
কাজের তালিকায় দুটি কাজ রয়েছে যার মধ্যে একটিকে হত্যা করার জন্য আপনি এটিকে চাকরীর নম্বর বা শর্টকাট %
, %+
("বর্তমান কাজ") এবং %-
("পূর্ববর্তী কাজ") দিয়ে অ্যাক্সেস করতে পারবেন , যেমন আপনার পটভূমিতে চলমান লুপটি মেরে ফেলতে করতে পার
kill %1 # or
kill %-
এবং স্থগিত করা sleep 10
কাজটি হত্যার জন্য :
kill %2 # or
kill %+ # or
kill %
আমার লক্ষ্য রাখতে হবে যে আপনি যখন টার্মিনালটি বন্ধ করেছেন যেখানে আপনি এই আদেশটি প্রবেশ করেছেন, সাব-কমান্ডটিও তার সাথে মারা গিয়েছিল। এটি পুনরুত্পাদন করার চেষ্টা করা এই আচরণটি দেখিয়েছিল।
এখন ধরে নেওয়া, আপনি সত্যিই এমন পরিস্থিতিতে আছেন যেখানে এটি ঘটেনি, আপনি যে প্রোগ্রামটিকে পটভূমিতে চালিয়ে রেখেছিলেন তা শেষ করার এক উপায়, যা &
কমান্ডের শেষের দিকে ঘটেছিল :
echo $$
আপনার বর্তমান পিআইডি (প্রসেস আইডি) নোট করতে চালান , যাতে আপনি নিজের সেশনটি না খোলেন।ps -ef | grep $SHELL
কোন প্রোগ্রামগুলি শেল চালাচ্ছে তা অনুসন্ধান করতে আপনি কমান্ডটি ব্যবহার করে এটি করতে পারেন ।echo $$
; এই যে পিআইডি আপনি হত্যা করতে চান।kill -SIGTERM <pid>
কমান্ডটি চালান , যেখানে <pid>
আপনি পদক্ষেপ # 3 তে সনাক্ত করেছেন এমন সংখ্যার মানটি কোথায়আপনি আপনার সেশন বা আপনার কম্পিউটার পুনরায় চালু করতে পারেন, তবে উপরেরগুলি আপনাকে এড়াতে অনুমতি দেবে।
&
টার্মিনাল নতুন পদ্ধতির তৈরি এবং এটা ভিতরে চালানোর জন্য আপনার কোড পাওয়ার করতে হবে। সুতরাং আপনার কোডটি টার্মিনাল প্রক্রিয়া থেকে স্বাধীন হয়ে যায়। এমনকি আপনি টার্মিনালটি বন্ধ করে দিলেও আপনার কোডটি যে নতুন প্রক্রিয়াতে চলছে তা বন্ধ হবে না। সুতরাং হয় অপসারণ করুন &
বা করুন ps -aux
, আপনার প্রক্রিয়াটি সনাক্ত করুন এবং এটি হত্যা করুন kill (process id)
।
অগ্রভাগের জন্য ব্যাকগ্রাউন্ড fg এর জন্য সাধারণত বিজি । আপনি যদি & চিহ্ন ব্যবহার করেন fg এটি বর্তমান চলমান প্রোগ্রামটি দেখায়। হত্যা করতে Ctrl + C টিপুন ।
bg
/ ব্যবহার fg
করবে না bash
। চাইল্ড প্রক্রিয়া রয়েছে ( reptyr
কারণ ) ব্যবহার করে পুনরায় যোগাযোগ করতে অক্ষম হবে । bash
sleep
top
প্রক্রিয়াটি টিপেk
, পিআইডি প্রবেশ করে, এবং তারপরে দুবার এন্টার টিপুন দিয়ে হত্যা করতে ব্যবহার করতে পারেন ।