বাশ এর মতো প্রক্রিয়াগুলিকে স্থগিত ও পুনরায় চালু করার উপায়


13

এই প্রশ্নটির ফলো-আপ: প্রক্রিয়াগুলিকে স্থগিত ও পুনরায় কীভাবে করা যায়

আমি জিনোম-টার্মিনালে বাশ সেশন থেকে ফায়ারফক্স শুরু করেছি।

প্রক্রিয়া গাছটি দেখতে এরকম দেখাচ্ছে:

$ ps -e -o pid,ppid,cmd -H
 1828     1   gnome-terminal
26677  1828     bash
27980 26677       /bin/sh /usr/lib/firefox-3.6.15/firefox
27985 27980         /bin/sh /usr/lib/firefox-3.6.15/run-mozilla.sh /usr/lib/firefox-3.6.15/firefox-bin
27989 27985           /usr/lib/firefox-3.6.15/firefox-bin
28012 27989             /usr/lib/firefox-3.6.15/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so 27989 plugin true

আমি যখন CTRL+Zব্যাশে আঘাত করব তখন এটি ফায়ারফক্সকে স্থগিত করবে। আমি কমান্ডটি প্রকাশ করার সময় bg(বা fg) এটি ফায়ারফক্স আবার শুরু করবে। এটি প্রত্যাশা অনুযায়ী

যখন আমি kill -s SIGTSTP 27980অন্য টার্মিনালে কমান্ডটি জারি করি , এটি [1]+ Stopped firefoxপ্রথম টার্মিনালে লাইনটি মুদ্রণ করবে (ঠিক যখন আমি আঘাত করব তখন CTRL+Z) তবে এটি ফায়ারফক্সকে স্থগিত করে না। আমি ধারণা করি এটি কেবল শেল স্ক্রিপ্ট স্থগিত করে।

যখন আমি kill -s SIGTSTP 27989অন্য টার্মিনালে কমান্ডটি (পিআইডি নোট করুন) প্রকাশ করব তখন এটি ফায়ারফক্সকে স্থগিত করবে। প্রথম টার্মিনাল এটি নোট করে না।

কীভাবে বাশ পুরো প্রক্রিয়া গাছ স্থগিত করে? এটি কি কেবল গাছটিকে অতিক্রম করে এবং সমস্ত বাচ্চাদের সিগস্টটিপি করে?



@ Geekosaur প্রক্রিয়া গ্রুপগুলি যে বিষয়ে কথা বলছে তা দেখতে pgidআপনার psকমান্ডটি যুক্ত করা উচিত ।
নিনজালজ

উত্তর:


17

শেল কাজগুলি "প্রক্রিয়া গ্রুপ" এ থাকে; PGRPপ্রসারিত psআউটপুট কলাম দেখুন । এগুলি উভয়ই চাকরি নিয়ন্ত্রণ এবং টার্মিনালের (প্রকৃত বা pty) "মালিকানা" নির্ধারণের জন্য ব্যবহৃত হয়।

পসিক্স (সিস্টেম ভি থেকে নেওয়া) প্রসেস গ্রুপটি চিহ্নিত করতে একটি নেতিবাচক প্রক্রিয়া আইডি ব্যবহার করে, যেহেতু প্রক্রিয়া গ্রুপটি গ্রুপের প্রথম প্রক্রিয়া দ্বারা চিহ্নিত করা হয় ("প্রক্রিয়া গ্রুপের নেতা")। সুতরাং আপনি psতারপর প্রক্রিয়া গ্রুপ নির্ধারণ করতে ব্যবহার করতে হবে kill -s TSTP "-$pgrp"। (চেষ্টা করুন ps -u"$USER" -opid,ppid,pgrp,cmd।)

আপনার প্রক্রিয়া ট্রিতে, প্রসেস গ্রুপটি firefoxচালু হওয়া স্ক্রিপ্ট দিয়ে শুরু হয় bash, তাই প্রক্রিয়া গ্রুপটি 27980 হবে এবং কমান্ডটি হবে kill -s TSTP -27980

স্বাভাবিকভাবেই, প্রক্রিয়া গ্রুপটি পুনরায় শুরু করতে, ইস্যু করা kill -s CONT -- -27980


7
যাইহোক, আপনি টাইপ bashকরার SIGTSTPসময় করছেন না ^Z; যেহেতু firefoxএর প্রক্রিয়া গ্রুপটি টার্মিনালের বর্তমান প্রক্রিয়া গ্রুপ, টার্মিনাল ড্রাইভার (প্যাডেন্টালি, লাইন শৃঙ্খলা) SIGTSTPসেই প্রক্রিয়া গোষ্ঠীর সমস্ত প্রক্রিয়াতে প্রেরণ করে । bashএটি কেবলমাত্র waitpid()(এবং অন্য কোনও কাজ) এ নিযুক্ত রয়েছে। অন্যান্য টার্মিনাল সিগন্যাল, যেমন ^Cএবং ^\ একইভাবে কাজ করে। (মেটা: এসই সিটিআরএল-ব্যাকস্ল্যাশকে ঘৃণা করে ..)
গীকোসৌর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.