ভাল মূল্য নাকি সিপিইউ শেয়ার?
দয়া করে মনে রাখবেন আজকাল, চমৎকার মান না, তাই প্রাসঙ্গিক "সিস্টেম-ব্যাপী" স্বয়ংক্রিয় গোষ্ঠীবদ্ধ, espacially যখন ব্যবহার টাস্ক কারণ হতে পারে, systemd হল । আরও বিশদ জন্য দয়া করে এই উত্তর দেখুন।
থ্রেড এবং প্রক্রিয়া মধ্যে পার্থক্য
লিনাক্সের ক্ষেত্রে গুরুত্বপূর্ণ প্রশ্ন, কারণ ডকুমেন্টেশন সন্দেহকে স্থায়ী করে তোলে (উদাহরণস্বরূপ থ্রেডগুলির নিজস্ব পিআইডি নেই)।
দ্রষ্টব্য: এই উত্তরটি লিনাক্স থ্রেডগুলি স্পষ্টভাবে ব্যাখ্যা করে explains
সংক্ষেপে: কার্নেলটি কেবল "চলমানযোগ্য সত্তা" পরিচালনা করে, যা চালানো ও নির্ধারিত কিছু । কার্নেল অনুযায়ী, এই সত্তাগুলি প্রসেস বলে called একটি থ্রেড, হ'ল এক ধরণের প্রক্রিয়া যা মেমরির স্থান এবং কমপক্ষে অন্যটির সাথে সংকেত হ্যান্ডলারগুলি ভাগ করে দেয়।
এই জাতীয় প্রতিটি প্রক্রিয়াটির একটি সিস্টেম-ব্যাপী অনন্য শনাক্তকারী রয়েছে: পিআইডি (প্রসেস আইডি)। তথাকথিত থ্রেডগুলির জন্য এটি কখনও কখনও টিআইডি (থ্রেড আইডি) বলা হয়, তবে সিসাদমিন (এবং কার্নেল!) দৃষ্টিকোণ থেকে, টিআইডি এবং পিআইডি একই জিনিস (তারা একই নামস্থান ভাগ করে নেয়)।
ফলস্বরূপ, আপনি পৃথকভাবে প্রতিটি "থ্রেড" করতে পারেন renice কারণ তাদের নিজস্ব পিআইডি 1 রয়েছে ।
পুনরাবৃত্তভাবে সমস্ত পিআইডি সন্ধান করাrenice
আমাদের সমস্ত প্রক্রিয়ার পিআইডি ("সাধারণ" বা "থ্রেড") পেতে হবে যা বংশধর হতে হবে (শিশুরা বা থ্রেড গ্রুপে) হতে হবে-হওয়া-করা প্রক্রিয়াটির। এটি পুনরাবৃত্ত হওয়া উচিত (বাচ্চাদের বাচ্চাদের বিবেচনা করে)।
অ্যান্টন লিওন্টিভ উত্তরগুলি এটি করার ইঙ্গিত দেয়: এর মধ্যে সমস্ত ফোল্ডারের নাম /proc/$PID/task/থ্রেডের পিআইডি হ'ল একটি childrenফাইলের সম্ভাব্য বাচ্চাদের প্রক্রিয়াগুলির তালিকাবদ্ধ করে।
তবে এটির পুনরুক্তি নেই, তাই এটিগুলি খুঁজে পাওয়ার জন্য এখানে দ্রুত এবং নোংরা শেল স্ক্রিপ্ট রয়েছে:
#!/bin/sh
[ "$#" -eq 1 -a -d "/proc/$1/task" ] || exit 1
PID_LIST=
findpids() {
for pid in /proc/$1/task/* ; do
pid="$(basename "$pid")"
PID_LIST="$PID_LIST$pid "
for cpid in $(cat /proc/$1/task/$pid/children) ; do
findpids $cpid
done
done
}
findpids $1
echo $PID_LIST
প্রক্রিয়া পিআইডি 1234 যদি আপনি পুনরাবৃত্তভাবে সুন্দর করতে চান তবে এখন আপনি এটি করতে পারেন:
renice -n 15 -p $(/path/to/findchildren.sh 1234)
1 উল্লেখ্য, POSIX মেনে চলার জন্য, কলিং getpid(2)একটি থ্রেড মধ্যে হবে না আপনি এই runnable সত্তা সিস্টেম-ব্যাপী অনন্য আইডি (PID) বরং "থ্রেড গ্রুপ" মধ্যে মূল প্রক্রিয়া এর PID, দিতে, কিন্তু। gettid(2)পরিবর্তে আপনাকে কল করতে হবে। আরও তথ্যের জন্য এই উত্তর দেখুন ।
man (7) pthreadsবর্তমান (এনপিটিএল) বাস্তবায়ন সম্পর্কে বলেছেন: "একটি প্রক্রিয়াতে সমস্ত থ্রেড একই থ্রেড গ্রুপে স্থাপন করা হয়; থ্রেড গ্রুপের সমস্ত সদস্য একই পিআইডি ভাগ করে নেয়" এবং "থ্রেডগুলি একটি সাধারণ সুন্দর মান ভাগ করে না"। তারপরে, আপনি কীভাবে কোনও থ্রেডটি পুনরায় ভাড়া করতে পারেন যার নিজস্ব পিআইডি নেই, যখন এটিreniceকরার জন্য কোনও পিআইডি ব্যবহার করে?