কোনও প্রক্রিয়া ঘুমের দিকে যাওয়ার এবং এটি জাগ্রত করার কারণ কীভাবে জানবেন?


19

যখন আমি 'শীর্ষ' করি, আমি আমার পার্ল স্ক্রিপ্ট প্রক্রিয়াটি 'এস' অবস্থায় দেখি। এখানে কীভাবে জানার উপায় আছে যে কী এই পার্ল প্রক্রিয়াটি ঘুমের রাজ্যে চলেছে এবং এটি জাগ্রত করার উপায়গুলি? পার্ল স্ক্রিপ্টে লাইনগুলিকে আরও বেশি 'অন্তর্দৃষ্টি দেওয়ার' ডিবাগ করার কোনও উপায় যা এটিকে 'এস' অবস্থায় যেতে পারে।

উত্তর:


22

Sরাষ্ট্রের কোনও প্রক্রিয়া সাধারণত একটি ব্লকিং সিস্টেম কলে থাকে যেমন কোনও ফাইল বা নেটওয়ার্কে পড়া বা লেখা, বা অন্য একটি প্রোগ্রাম শেষ হওয়ার অপেক্ষায়।

strace -p <pid>বর্তমানে কোন সিস্টেম কলটি ঘটছে তা জানতে আপনি ব্যবহার করতে পারেন । এটি যেমন আউটপুট উত্পাদন করবে

লিখুন (1, "ফুবার" ..., 4096

যার অর্থ প্রক্রিয়াটি "foobar" থেকে stdout (fd # 1) দিয়ে শুরু করে 4096 বাইট লেখার চেষ্টা করছে তবে এটি যা যা পুনঃনির্দেশিত হয়েছে তা ব্যস্ত এবং আউটপুট বাফার পূর্ণ।


5

প্রক্রিয়াগুলি ঘুমের রাজ্যে যায় যখন তারা কোনও কিছুর জন্য অপেক্ষা করে থাকে, সাধারণত I / O।

আপনার প্রক্রিয়াটি Sযখন অবস্থাটি পড়বে তখন সম্ভবত এমন লেখা পড়বে যা সম্ভবত ব্লক করছে। Semaphores বা অন্যান্য সিঙ্ক্রোনাইজেশন আদিমগুলিতে অপেক্ষা করার সময়ও ঘটতে পারে।

আপনি "এটি জাগ্রত" করতে পারবেন না - এটি কেবল তখনই এগিয়ে যাবে যখন এটির জন্য অপেক্ষা করা ডেটা / সংস্থানটি উপলভ্য হবে।

এটি সবই স্বাভাবিক এবং প্রত্যাশিত এবং সাধারণত কোনও সমস্যা হয় না। সাধারণত, এই "প্রোগ্রাম" কোনও ফাইল ছাড়াই কমান্ড লাইনে চলে:

while (<>) { print; }

এর বেশিরভাগ সময় ঘুমের রাজ্যে ব্যয় করবে, যা ভাল - ব্যবহারকারী ইনপুটটির জন্য অপেক্ষা করার সময় আপনি এটি সিপিইউ নষ্ট করতে চান না।

আপনি যদি মনে করেন এটি সমস্যা, আপনি নিজের আই / ও করার পদ্ধতিটি পরিবর্তন করার চেষ্টা করুন (অন্তর্নিহিত ডিভাইসের ব্লকের আকারের দুর্দান্ত গুণগুলিতে, মেমরিযুক্ত I / O ইত্যাদি তৈরি করে) doing

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.