এখানে দেখুন
আছে দুই সংকেত দেয় যে একটি প্রক্রিয়া সঞ্চালনের স্থগিত করতে পারেন। একটি হ'ল "করুণাময়", এবং একটি "বলপ্রয়োগকারী"।
"গ্রেফুল" হ'ল SIGTSTPএবং এর উদ্দেশ্যটি প্রক্রিয়াটি "সুন্দরভাবে" জিজ্ঞাসা করা, যদি এটির মতো মনে হয় তবে দয়া করে এটি গ্রহণ না করা পর্যন্ত মৃত্যুদণ্ড স্থগিত করুন SIGCONT। এর ক্ষেত্রে SIGTSTP, প্রক্রিয়াটি SIGTSTP উপেক্ষা করতে পারে এবং যেভাবেই চালানো চালিয়ে যেতে পারে, সুতরাং এটি একটি প্রোগ্রামের সহযোগিতা প্রয়োজন যা SIGTSTP পরিচালনা করার জন্য ডিজাইন করা হয়েছে।
"বলপূর্বক" হ'ল SIGSTOPএবং এর উদ্দেশ্য হল সেই প্রক্রিয়াটির সাথে সম্পর্কিত সমস্ত ব্যবহারকারী স্থান থ্রেড স্থগিত করা। প্রক্রিয়াটিকে এড়ানো যেমন অসম্ভব SIGSTOPতেমনি এটি উপেক্ষা করাও SIGKILL(পরবর্তীকালে প্রসেসটিকে জোর করে হত্যা করা হয়)।
একটি অবাধ সংকেত পাঠানোর জন্য, এখানে উল্লিখিত বেশী কোন সহ, আপনি যেমন প্রোগ্রাম ব্যবহার করতে পারেন kill, killallঅথবা pkill; বা সিস্টেম কল ব্যবহার করুন kill(2)। উপরের যে কোনও সম্পর্কে প্ল্যাটফর্ম / আর্কিটেকচার / সংস্করণ-নির্ভর বিশদ এবং ত্রুটি-বিচ্যুতির জন্য আপনার অপারেটিং সিস্টেমের ম্যানেজগুলি দেখুন। নোট করুন যে এই সমস্ত কমান্ডে "কিল" শব্দটি এবং সিস্কালটি একটি খারাপ মিসনোমার। এই কমান্ডগুলি প্রক্রিয়া বন্ধ করতে একচেটিয়াভাবে ডিজাইন করা হয়নি । তারা করতে পারেন যে কি সংকেত নির্দিষ্ট বেশী পাঠিয়ে; তবে সিগন্যালগুলি কোনও প্রক্রিয়া বন্ধ করার পরিবর্তে কার্যকারিতার জন্যও ব্যবহৃত হতে পারে। উদাহরণস্বরূপ, SIGSTOPকেবলমাত্র প্রক্রিয়াটি স্থগিত করে, এবং এটি বেশ কয়েকটি সংকেতগুলির মধ্যে একটি যা এইভাবে পাঠানো যেতে পারে।
সময়সীমা অতিক্রান্ত হওয়ার পরে প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পুনরায় শুরু করার শর্ত যুক্ত করার জন্য, আপনাকে পর্যবেক্ষণ প্রক্রিয়াটি জাগিয়ে তোলার জন্য চলমান থাকা এবং টাইমার নির্ধারণের জন্য কিছু প্রকারের ব্যবহার করতে হবে যা পরে kill(2)আবার কল করে এবং SIGCONTকার্নেলটিকে পুনরায় সঞ্চালন শুরু করার জন্য অনুরোধ করার জন্য, থামানো প্রক্রিয়াতে সংকেত প্রেরণ করে । নোট করুন যে লিনাক্সের বিভিন্ন ডিগ্রি যথাযথতা এবং নির্ভুলতার সাথে বিভিন্ন সময়সীম রয়েছে; তদ্ব্যতীত, যদি আপনার সিস্টেমটি খুব ব্যস্ত থাকে তবে আপনার মনিটরিং প্রক্রিয়াটি টাইমারটির মেয়াদ শেষ হওয়ার পরে ভাল না হওয়া পর্যন্ত জাগ্রত না হতে পারে, এবং এভাবে ওয়েকআপটি বিলম্ব হতে পারে।
আপনি সাসপেনশন এবং স্থগিত প্রক্রিয়া পুনরারম্ভ খুব সঠিক স্পষ্টতা উপর নির্ভর করে থাকে, তাহলে আপনি রিয়েল-টাইম অনুমতিসহ আপনার পর্যবেক্ষণ প্রোগ্রাম চালানো (দেখুন করার প্রয়োজন হতে পারে এই র manpage উপর sched_setscheduler(2)আপনার প্রক্রিয়া রিয়েল-টাইম উপার্জন সম্পর্কে তথ্যের জন্য)। সময়সীমার বিষয়ে খুব নির্ভুল, সাব-মিলিসেকেন্ড যথার্থতা পেতে, আপনি রিয়েল-টাইম শিডিয়ুলিংয়ের সাথে মিলিয়ে, লিনাক্স কার্নেলের একটি বৈশিষ্ট্য (উচ্চ-রেজোলিউশন টাইমারস) ব্যবহার করতে পারেন (এটি কেবল তখনই উপলব্ধ যখন আপনার হার্ডওয়্যার তাদের জন্য সমর্থন সরবরাহ করে) খুব দ্রুত নিরীক্ষণ প্রক্রিয়া পুনরায় শুরু করতে জাগুন এবং সংকেত প্রেরণ করুন।
আপনি এটি প্রয়োগ করতে কোন প্রযুক্তি ব্যবহার করতে ইচ্ছুক তা নির্দেশ করেননি। একদম ন্যূনতম সময়ে, আপনার কমপক্ষে ব্যাশ স্ক্রিপ্টিংয়ের প্রয়োজন হবে, যদিও আপনি সেভাবে খুব সূক্ষ্ম-সময়যুক্ত সময় পেতে সক্ষম হবেন না। এখানে একটি বাশ "স্ক্রিপ্ট" রয়েছে (অনির্ধারিত, সুতরাং দয়া করে সাবধান হন) যা আপনার কোয়েরির ধারণার প্রমাণ মাত্র। আপনার যদি সুনির্দিষ্ট সময় প্রয়োজন হয় তবে আপনাকে অবশ্যই একটি প্রোগ্রাম লিখতে হবে সম্ভবত সি / সি ++ বা অন্য কোনও মাতৃভাষায়, এবং রিয়েল-টাইম শিডিয়ুলিং এবং রাইটারস ব্যবহার করতে হবে।
#!/bin/bash
#This is the process you want to suspend.
screen -mdS child bash -c "cat /dev/urandom | base64"
#This is the process ID of the child process
THEPID=$(screen -list | grep child | cut -f1 -d'.' | sed 's/\W//g')
#Send SIGSTOP to the child process.
kill -SIGSTOP ${THEPID}
#Now it is suspended. This process will sleep for 10 seconds asynchronously, then resume the process.
screen -mdS monitor bash -c "sleep 10; kill -SIGCONT ${THEPID}"
নোট করুন যে স্ক্রিপ্টটি শেষ হবে এবং নিয়ন্ত্রণকারী স্ক্রিপ্টটি শেষ হবে, তবে screenমনিটর প্রক্রিয়াটি নিয়ন্ত্রণের কারণে , এটি 10 সেকেন্ডের জন্য পটভূমিতে চলতে থাকবে (প্রদত্ত যুক্তির উপর ভিত্তি করে sleep) এবং তারপরে জেগে উঠবে এবং শিশু প্রক্রিয়াটি চালিয়ে যাবে। তবে এটি নিয়ন্ত্রণকারী স্ক্রিপ্ট শেষ হওয়ার পরে দীর্ঘ হবে। আপনি যদি সিঙ্ক্রোনালি সময়টি কাটিয়ে ওঠার জন্য অপেক্ষা করতে চান তবে দ্বিতীয় কলটি screenএবং স্লিপ-হার্ড-কোডটি বাদ দিন এবং নিয়ন্ত্রণকারী স্ক্রিপ্টে কিল করুন।
আপনি পরীক্ষা করতে পারেন যে প্রক্রিয়াটি আসলে চালিত করে স্থগিত করে
screen -rS child
আপনি এই স্ক্রিপ্ট শুরু করার পরে। আপনি কনসোলে কিছুই দেখতে পাবেন না। তারপরে টাইমারটির (10 সেকেন্ড) মেয়াদ শেষ হওয়ার পরে, এটি আপনার স্ক্রিনটিকে বেস 64 এর ডেটা (0-9 এবং এএফ থেকে এলোমেলো অক্ষর) দিয়ে প্লাবিত করবে। প্রস্থান করতে Ctrl + C টিপুন।