getpriority(2)

الاسم
getpriority, setpriority - الحصول/تعيين أولوية جدولة البرنامج

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <sys/resource.h>

int getpriority(int which, id_t who);
int setpriority(int which, id_t who, int prio);

الوصف
أولوية الجدولة للعملية، أو مجموعة العمليات، أو المستخدم، كما هو موضح بواسطة which و who، يتم الحصول عليها باستدعاء getpriority() وتعيينها باستدعاء setpriority(). سمة العملية التي تتعامل معها استدعاءات النظام هذه هي نفس السمة (المعروفة أيضًا بقيمة "nice") التي يتعامل معها nice(2).

القيمة which هي إحدى PRIO_PROCESS أو PRIO_PGRP أو PRIO_USER، ويتم تفسير who بالنسبة إلى which (معرف عملية لـ PRIO_PROCESS، ومعرف مجموعة عمليات لـ PRIO_PGRP، ومعرف مستخدم لـ PRIO_USER). القيمة الصفرية لـ who تشير (على التوالي) إلى العملية المستدعية، أو مجموعة العمليات للعملية المستدعية، أو معرف المستخدم الحقيقي للعملية المستدعية.

الوسيطة prio هي قيمة في النطاق -20 إلى 19 (ولكن انظر الملاحظات أدناه)، حيث -20 هي أعلى أولوية و 19 هي أدنى أولوية. محاولات تعيين أولوية خارج هذا النطاق يتم تقييدها بصمت إلى النطاق. الأولوية المبدئية هي 0؛ القيم الأقل تعطي العملية أولوية جدولة أعلى.

استدعاء getpriority() يعيد أعلى أولوية (أقل قيمة عددية) تتمتع بها أي من العمليات المحددة. استدعاء setpriority() يعين أولويات جميع العمليات المحددة إلى القيمة المحددة.

تقليديًا، كانت العملية المتميزة فقط هي التي يمكنها خفض قيمة nice (أي ضبط أولوية أعلى). ومع ذلك، فمنذ لينكس 2.6.12، يمكن لعملية غير متميزة تقليل قيمة nice لعملية مستهدفة لها حد مرن مناسب لـ RLIMIT_NICE؛ انظر getrlimit(2) لمزيد من التفاصيل.

قيمة الإرجاع
عند النجاح، يعيد getpriority() قيمة nice للخيط المستدعي، والتي قد تكون رقمًا سالبًا. عند الخطأ، يعيد -1 ويضبط errno للإشارة إلى الخطأ.

نظرًا لأن الاستدعاء الناجح لـ getpriority() يمكن أن يعيد بشكل شرعي القيمة -1، فمن الضروري مسح errno قبل الاستدعاء، ثم التحقق من errno بعد ذلك لتحديد ما إذا كانت -1 خطأ أم قيمة شرعية.

setpriority() يعيد 0 عند النجاح. عند الفشل، يعيد -1 ويضبط errno للإشارة إلى الخطأ.

الأخطاء

EACCES
    حاول المستدعي تعيين قيمة nice أقل (أي أولوية عملية أعلى)، لكنه لم يكن لديه الامتياز المطلوب (على لينكس: لم يكن لديه القدرة CAP_SYS_NICE).

EINVAL
    which لم تكن واحدة من PRIO_PROCESS أو PRIO_PGRP أو PRIO_USER.

EPERM
    تم تحديد موقع عملية، لكن معرف المستخدم الفعال الخاص بها لم يطابق المعرف الفعال أو الحقيقي للمستخدم المستدعي، ولم تكن مميزة (على لينكس: لم يكن لديها القدرة CAP_SYS_NICE). ولكن انظر التاريخ أدناه.

ESRCH
    لم يتم تحديد موقع أي عملية باستخدام قيم which و who المحددة.

المعايير
POSIX.1-2024.

التاريخ
4.2BSD, SVr4, SUSv1, POSIX.1-2001 XSI.

تفاصيل حالة EPERM تعتمد على النظام. الوصف أعلاه هو ما يقوله POSIX.1-2001، ويبدو أنه متبع في جميع الأنظمة الشبيهة بـ System V. أنوية لينكس قبل لينكس 2.6.12 تطلبت أن يتطابق معرف المستخدم الحقيقي أو الفعال للمستدعي مع المستخدم الحقيقي للعملية who (بدلاً من معرف المستخدم الفعال الخاص بها). لينكس 2.6.12 والإصدارات الأحدث تتطلب أن يتطابق معرف المستخدم الفعال للمستدعي مع معرف المستخدم الحقيقي أو الفعال للعملية who. جميع الأنظمة الشبيهة بـ BSD (SunOS 4.1.3, Ultrix 4.2, 4.3BSD, FreeBSD 4.3, OpenBSD-2.5, ...) تتصرف بنفس طريقة لينكس 2.6.12 والإصدارات الأحدث.

ملاحظات
لمزيد من التفاصيل حول قيمة اللطافة (nice value)، راجع sched(7).

ملاحظة: إضافة ميزة "التجميع الآلي" في لينكس 2.6.38 تعني أن قيمة الأولوية (nice) لم يعد لها تأثيرها التقليدي في كثير من الظروف. للتفاصيل، انظر sched(7).

الطفل الذي تم إنشاؤه بواسطة fork(2) يرث قيمة nice الخاصة بالوالد. يتم الحفاظ على قيمة nice عبر execve(2).

  الاختلافات بين مكتبة C والنواة
استدعاء النظام getpriority يعيد قيم nice مترجمة إلى النطاق 40..1، حيث أن القيمة السالبة سيتم تفسيرها كخطأ. دالة الغلاف glibc لـ getpriority() تترجم القيمة مرة أخرى وفقًا للصيغة unice =20-ice (وبالتالي، النطاق 40..1 الذي يعيده النواة يتوافق مع النطاق -20..19 كما يُرى من مساحة المستخدم).

العلل
وفقًا لـ POSIX، قيمة nice هي إعداد لكل عملية. ومع ذلك، في ظل تطبيق لينكس/NPTL الحالي لخيوط POSIX، قيمة nice هي سمة لكل خيط: يمكن للخيوط المختلفة في نفس العملية أن يكون لها قيم nice مختلفة. يجب على التطبيقات المحمولة تجنب الاعتماد على سلوك لينكس، والذي قد يتم جعله متوافقًا مع المعايير في المستقبل.

انظر أيضًا
nice(1), renice(1), fork(2), capabilities(7), sched(7)

Documentation/scheduler/sched-nice-design.rst في شجرة مصدر نواة لينكس (منذ لينكس 2.6.23)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.