.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1992, Drew Eckhardt .\" Copyright 2002-2010, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getrlimit 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم getrlimit, setrlimit, prlimit \- الحصول/تعيين حدود الموارد .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint getrlimit(int \fP\fIresource\fP\fB, struct rlimit *\fP\fIrlim\fP\fB);\fP \fBint setrlimit(int \fP\fIresource\fP\fB, const struct rlimit *\fP\fIrlim\fP\fB);\fP .P \fBint prlimit(pid_t \fP\fIpid\fP\fB, int \fP\fIresource\fP\fB,\fP \fB const struct rlimit *_Nullable \fP\fInew_limit\fP\fB,\fP \fB struct rlimit *_Nullable \fP\fIold_limit\fP\fB);\fP .P .fi .EX \fBstruct rlimit {\fP \fB rlim_t rlim_cur;\fP /* الحد الناعم */ \fB rlim_t rlim_max;\fP /* الحد الصلب (سقف لـ rlim_cur) */ \fB};\fP .EE .nf .P \fBtypedef\fP /* ...\& */ \fBrlim_t;\fP /* Unsigned integer type */ .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBprlimit\fP(): .nf _GNU_SOURCE .fi .SH الوصف استدعاءات النظام \fBgetrlimit\fP() و \fBsetrlimit\fP() تحصل وتضبط حدود الموارد. كل مورد له حد ناعم وصلب مرتبط به، كما هو معرف بهيكل \fIrlimit\fP. .P الحد الناعم هو القيمة التي يفرضها النواة للمورد المقابل. الحد الصلب يعمل كسقف للحد الناعم: عملية غير مميزة يمكنها فقط ضبط حدها الناعم إلى قيمة في النطاق من 0 حتى الحد الصلب، وخفض حدها الصلب (بشكل لا رجعة فيه). عملية مميزة (تحت لينكس: تلك التي تملك قدرة \fBCAP_SYS_RESOURCE\fP في مساحة المستخدم الأولية) يمكنها إجراء تغييرات عشوائية على أي من قيمتي الحد. .P القيمة \fBRLIM_INFINITY\fP تشير إلى عدم وجود حد على مورد (سواء في الهيكل الذي يعيده \fBgetrlimit\fP() أو في الهيكل الذي يمرر إلى \fBsetrlimit\fP()). .P وسيطة \fIresource\fP يجب أن تكون واحدة من: .TP \fBRLIMIT_AS\fP .\" since Linux 2.0.27 / Linux 2.1.12 هذا هو الحجم الأقصى للذاكرة الافتراضية للعملية (مساحة العناوين). الحد محدد بالبايتات، ويتم تقريبه لأسفل إلى حجم صفحة النظام. هذا الحد يؤثر على استدعاءات \fBbrk\fP(2)، \fBmmap\fP(2)، و \fBmremap\fP(2)، التي تفشل مع الخطأ \fBENOMEM\fP عند تجاوز هذا الحد. بالإضافة إلى ذلك، فشل التوسع التلقائي للمكدس (ويولد \fBSIGSEGV\fP الذي يقتل العملية إذا لم يتم توفير مكدس بديل عبر \fBsigaltstack\fP(2)). نظرًا لأن القيمة من نوع \fIlong\fP، على الأجهزة ذات \fIlong\fP 32 بت، إما أن هذا الحد هو على الأكثر 2\ جيبي بايت، أو أن هذا المورد غير محدود. .TP \fBRLIMIT_CORE\fP هذا هو الحجم الأقصى لملف \fIcore\fP (انظر \fBcore\fP(5)) بالبايتات الذي يمكن للعملية تفريغه. عندما يكون 0، لا يتم إنشاء ملفات تفريغ أساسية. عندما يكون غير صفري، يتم اقتطاع التفريغات الأكبر إلى هذا الحجم. .TP \fBRLIMIT_CPU\fP هذا هو حد، بالثواني، على مقدار وقت وحدة المعالجة المركزية الذي يمكن للعملية استهلاكه. عندما تصل العملية إلى الحد الناعم، يتم إرسال إشارة \fBSIGXCPU\fP إليها. الإجراء المبدئي لهذه الإشارة هو إنهاء العملية. ومع ذلك، يمكن التقاط الإشارة، ويمكن للمعالج إعادة التحكم إلى البرنامج الرئيسي. إذا استمرت العملية في استهلاك وقت وحدة المعالجة المركزية، سيتم إرسال \fBSIGXCPU\fP مرة واحدة في الثانية حتى يتم الوصول إلى الحد الصلب، وعندها يتم إرسال \fBSIGKILL\fP. (هذه النقطة الأخيرة تصف سلوك لينكس. تختلف التطبيقات في كيفية معالجتها للعمليات التي تستمر في استهلاك وقت وحدة المعالجة المركزية بعد الوصول إلى الحد الناعم. التطبيقات المحمولة التي تحتاج إلى التقاط هذه الإشارة يجب أن تقوم بإنهاء منظم عند أول استقبال لـ \fBSIGXCPU\fP.) .TP \fBRLIMIT_DATA\fP .\" commits 84638335900f1995495838fe1bd4870c43ec1f67 .\" ("mm: rework virtual memory accounting"), .\" f4fcd55841fc9e46daac553b39361572453c2b88 .\" (mm: enable RLIMIT_DATA by default with workaround for valgrind). هذا هو الحجم الأقصى لقطاع البيانات للعملية (البيانات المهيأة، البيانات غير المهيأة، والكومة). الحد محدد بالبايتات، ويتم تقريبه لأسفل إلى حجم صفحة النظام. هذا الحد يؤثر على استدعاءات \fBbrk\fP(2)، \fBsbrk\fP(2)، و (منذ لينكس 4.7) \fBmmap\fP(2)، التي تفشل مع الخطأ \fBENOMEM\fP عند مواجهة الحد الناعم لهذا المورد. .TP \fBRLIMIT_FSIZE\fP هذا هو الحجم الأقصى بالبايتات للملفات التي يمكن للعملية إنشاؤها. محاولات تمديد ملف يتجاوز هذا الحد تؤدي إلى تسليم إشارة \fBSIGXFSZ\fP. بشكل مبدئي، هذه الإشارة تنهي العملية، ولكن يمكن للعملية التقاط هذه الإشارة بدلاً من ذلك، وفي هذه الحالة يفشل استدعاء النظام ذو الصلة (مثل \fBwrite\fP(2)، \fBtruncate\fP(2)) مع الخطأ \fBEFBIG\fP. .TP \fBRLIMIT_LOCKS\fP (لينكس 2.4.0 إلى لينكس 2.4.24) .\" to be precise: Linux 2.4.0-test9; no longer in Linux 2.4.25 / Linux 2.5.65 هذا هو حد على العدد المجمع لأقفال \fBflock\fP(2) وعقود إيجار \fBfcntl\fP(2) التي يمكن لهذه العملية إنشاؤها. .TP \fBRLIMIT_MEMLOCK\fP هذا هو الحد الأقصى لعدد بايتات الذاكرة التي يمكن قفلها في ذاكرة الوصول العشوائي. هذا الحد يتم تقريبه لأسفل إلى أقرب مضاعف لحجم صفحة النظام. هذا الحد يؤثر على \fBmlock\fP(2)، \fBmlockall\fP(2)، وعملية \fBmmap\fP(2) \fBMAP_LOCKED\fP. منذ لينكس 2.6.9، يؤثر أيضًا على عملية \fBshmctl\fP(2) \fBSHM_LOCK\fP، حيث يضع حدًا أقصى على إجمالي البايتات في قطاعات الذاكرة المشتركة (انظر \fBshmget\fP(2)) التي يمكن قفلها بواسطة معرف المستخدم الحقيقي للعملية المستدعية. أقفال \fBshmctl\fP(2) \fBSHM_LOCK\fP تحسب بشكل منفصل عن أقفال الذاكرة لكل عملية التي تم إنشاؤها بواسطة \fBmlock\fP(2)، \fBmlockall\fP(2)، و \fBmmap\fP(2) \fBMAP_LOCKED\fP؛ يمكن للعملية قفل بايتات حتى هذا الحد في كل من هاتين الفئتين. .IP قبل لينكس 2.6.9، كان هذا الحد يتحكم في مقدار الذاكرة التي يمكن قفلها بواسطة عملية مميزة. منذ لينكس 2.6.9، لا يتم وضع حدود على مقدار الذاكرة التي يمكن لعملية مميزة قفلها، وبدلاً من ذلك يحكم هذا الحد مقدار الذاكرة التي يمكن لعملية غير مميزة قفلها. .TP \fBRLIMIT_MSGQUEUE\fP (منذ لينكس 2.6.8) هذا هو حد على عدد البايتات التي يمكن تخصيصها لقوائم رسائل POSIX لمعرف المستخدم الحقيقي للعملية المستدعية. هذا الحد يتم فرضه لـ \fBmq_open\fP(3). كل قائمة رسائل ينشئها المستخدم تحسب (حتى يتم إزالتها) ضد هذا الحد وفقًا للصيغة: .RS 4 .IP منذ لينكس 3.5: .IP .in +4n .EX bytes = attr.mq_maxmsg * sizeof(struct msg_msg) + MIN(attr.mq_maxmsg, MQ_PRIO_MAX) * sizeof(struct posix_msg_tree_node)+ /* للتحميل الإضافي */ attr.mq_maxmsg * attr.mq_msgsize; /* لبيانات الرسالة */ .EE .in .IP لينكس 3.4 وما قبله: .IP .in +4n .EX بايت = attr.mq_maxmsg * sizeof(struct msg_msg *) + /* للتراكب */ attr.mq_maxmsg * attr.mq_msgsize; /* لبيانات الرسالة */ .EE .in .RE .IP حيث \fIattr\fP هي بنية \fImq_attr\fP المحددة كوسيطة رابعة لـ \fBmq_open\fP(3)، وبنيتا \fImsg_msg\fP و \fIposix_msg_tree_node\fP هما بنيتان داخليتان للنواة. .IP المُضاف "التراكب" في الصيغة يحسب البايتات المطلوبة للتراكب من قبل التطبيق ويضمن أن المستخدم لا يمكنه إنشاء عدد غير محدود من الرسائل ذات الطول الصفري (مثل هذه الرسائل تستهلك مع ذلك بعض ذاكرة النظام لتراكب المحاسبة). .TP \fBRLIMIT_NICE\fP (منذ لينكس 2.6.12، لكن انظر الأخطاء أدناه) يحدد هذا سقفًا يمكن رفع قيمة nice للعملية إليه باستخدام \fBsetpriority\fP(2) أو \fBnice\fP(2). يُحسب السقف الفعلي لقيمة nice كـ \fI20\ \-\ rlim_cur\fP. وبالتالي فإن النطاق المفيد لهذا الحد هو من 1 (المقابل لقيمة nice 19) إلى 40 (المقابل لقيمة nice \-20). كان هذا الاختيار غير المعتاد للنطاق ضروريًا لأن الأرقام السالبة لا يمكن تحديدها كقيم حدود للموارد، حيث أن لها معاني خاصة عادةً. على سبيل المثال، \fBRLIM_INFINITY\fP عادةً ما يكون نفس \-1. لمزيد من التفاصيل حول قيمة nice، انظر \fBsched\fP(7). .TP \fBRLIMIT_NOFILE\fP يحدد هذا قيمة أكبر بواحد من الحد الأقصى لرقم واصف الملف الذي يمكن فتحه بواسطة هذه العملية. المحاولات (\fBopen\fP(2)، \fBpipe\fP(2)، \fBdup\fP(2)، إلخ) لتجاوز هذا الحد تؤدي إلى الخطأ \fBEMFILE\fP. (تاريخيًا، كان هذا الحد يُسمى \fBRLIMIT_OFILE\fP على BSD.) .IP منذ لينكس 4.5، يحدد هذا الحد أيضًا الحد الأقصى لعدد واصفات الملفات التي يمكن لعملية غير مميزة (بدون صلاحية \fBCAP_SYS_RESOURCE\fP) أن يكون لديها "قيد الإرسال" إلى عمليات أخرى، عن طريق تمريرها عبر مقابس نطاق UNIX. ينطبق هذا الحد على استدعاء النظام \fBsendmsg\fP(2). لمزيد من التفاصيل، انظر \fBunix\fP(7). .TP \fBRLIMIT_NPROC\fP هذا حد على عدد العمليات الموجودة (أو، بشكل أدق على لينكس، الخيوط) لمعرف المستخدم الحقيقي للعملية المستدعية. طالما أن العدد الحالي للعمليات التابعة لمعرف المستخدم الحقيقي لهذه العملية أكبر من أو يساوي هذا الحد، يفشل \fBfork\fP(2) مع الخطأ \fBEAGAIN\fP. .IP لا يُفرض حد \fBRLIMIT_NPROC\fP على العمليات التي لديها صلاحية \fBCAP_SYS_ADMIN\fP أو \fBCAP_SYS_RESOURCE\fP، أو تعمل بمعرف مستخدم حقيقي 0. .TP \fBRLIMIT_RSS\fP .\" As at Linux 2.6.12, this limit still does nothing in Linux 2.6 though .\" talk of making it do something has surfaced from time to time in LKML .\" -- MTK, Jul 05 هذا حد (بالبايت) على المجموعة المقيمة للعملية (عدد الصفحات الافتراضية المقيمة في RAM). لهذا الحد تأثير فقط في لينكس 2.4.x، x < 30، ويؤثر هناك فقط على استدعاءات \fBmadvise\fP(2) التي تحدد \fBMADV_WILLNEED\fP. .TP \fBRLIMIT_RTPRIO\fP (منذ لينكس 2.6.12، لكن انظر الأخطاء) يحدد هذا سقفًا للأولوية الزمنية الحقيقية التي يمكن تعيينها لهذه العملية باستخدام \fBsched_setscheduler\fP(2) و \fBsched_setparam\fP(2). .IP لمزيد من التفاصيل حول سياسات الجدولة الزمنية الحقيقية، انظر \fBsched\fP(7) .TP \fBRLIMIT_RTTIME\fP (منذ لينكس 2.6.25) هذا حد (بالميكروثانية) على مقدار وقت وحدة المعالجة المركزية الذي يمكن لعملية مجدولة تحت سياسة جدولة زمنية حقيقية استهلاكه دون إجراء استدعاء نظام حظر. لغرض هذا الحد، في كل مرة تقوم فيها عملية باستدعاء نظام حظر، يُعاد تعيين عدد وقت وحدة المعالجة المركزية المستهلك إلى الصفر. لا يُعاد تعيين عدد وقت وحدة المعالجة المركزية إذا استمرت العملية في محاولة استخدام وحدة المعالجة المركزية ولكن تم استباقها، أو انتهت شريحة وقتها، أو استدعت \fBsched_yield\fP(2). .IP عند الوصول إلى الحد الناعم، تُرسل إشارة \fBSIGXCPU\fP إلى العملية. إذا التقطت العملية هذه الإشارة أو تجاهلتها واستمرت في استهلاك وقت وحدة المعالجة المركزية، فسيتم توليد \fBSIGXCPU\fP مرة كل ثانية حتى يتم الوصول إلى الحد الصلب، وعندها تُرسل إشارة \fBSIGKILL\fP إلى العملية. .IP الاستخدام المقصود لهذا الحد هو إيقاف عملية زمنية حقيقية جامحة من تعطيل النظام. .IP لمزيد من التفاصيل حول سياسات الجدولة الزمنية الحقيقية، انظر \fBsched\fP(7) .TP \fBRLIMIT_SIGPENDING\fP (منذ لينكس 2.6.8) .\" This replaces the /proc/sys/kernel/rtsig-max system-wide limit .\" that was present in Linux <= 2.6.7. MTK Dec 04 هذا حد على عدد الإشارات التي يمكن وضعها في قائمة الانتظار لمعرف المستخدم الحقيقي للعملية المستدعية. تُحسب كل من الإشارات القياسية والزمنية الحقيقية لغرض التحقق من هذا الحد. ومع ذلك، يُفرض الحد فقط لـ \fBsigqueue\fP(3); من الممكن دائمًا استخدام \fBkill\fP(2) لوضع نسخة واحدة من أي من الإشارات غير الموجودة بالفعل في قائمة انتظار العملية. .TP \fBRLIMIT_STACK\fP هذا هو الحد الأقصى لحجم مكدس العملية، بالبايت. عند الوصول إلى هذا الحد، يتم توليد إشارة \fBSIGSEGV\fP. لمعالجة هذه الإشارة، يجب على العملية استخدام مكدس إشارات بديل (\fBsigaltstack\fP(2)). .IP منذ لينكس 2.6.23، يحدد هذا الحد أيضًا مقدار المساحة المستخدمة لوسائط سطر الأوامر ومتغيرات البيئة للعملية؛ للتفاصيل، انظر \fBexecve\fP(2). .SS prlimit() .\" commit c022a0acad534fd5f5d5f17280f6d4d135e74e81 .\" Author: Jiri Slaby .\" Date: Tue May 4 18:03:50 2010 +0200 .\" .\" rlimits: implement prlimit64 syscall .\" .\" commit 6a1d5e2c85d06da35cdfd93f1a27675bfdc3ad8c .\" Author: Jiri Slaby .\" Date: Wed Mar 24 17:06:58 2010 +0100 .\" .\" rlimits: add rlimit64 structure .\" استدعاء النظام الخاص بلينكس \fBprlimit\fP() يجمع ويوسع وظائف \fBsetrlimit\fP() و \fBgetrlimit\fP(). يمكن استخدامه لتعيين وجلب حدود الموارد لعملية عشوائية. .P الوسيطة \fIresource\fP لها نفس المعنى كما في \fBsetrlimit\fP() و \fBgetrlimit\fP(). .P إذا كانت الوسيطة \fInew_limit\fP ليست NULL، فسيتم استخدام بنية \fIrlimit\fP التي تشير إليها لتعيين قيم جديدة للحدود الناعمة والصلبة لـ \fIresource\fP. إذا كانت الوسيطة \fIold_limit\fP ليست NULL، فإن استدعاءًا ناجحًا لـ \fBprlimit\fP() يضع الحدود الناعمة والصلبة السابقة لـ \fIresource\fP في بنية \fIrlimit\fP المشار إليها بواسطة \fIold_limit\fP. .P .\" FIXME . this permission check is strange .\" Asked about this on LKML, 7 Nov 2010 .\" "Inconsistent credential checking in prlimit() syscall" الوسيطة \fIpid\fP تحدد معرف العملية التي سيعمل عليها الاستدعاء. إذا كان \fIpid\fP هو 0، فإن الاستدعاء ينطبق على العملية المستدعية. لتعيين أو جلب موارد عملية غير نفسها، يجب أن يكون لدى المستدعي صلاحية \fBCAP_SYS_RESOURCE\fP في مساحة اسم المستخدم للعملية التي يتم تغيير حدود مواردها، أو يجب أن تتطابق معرفات المستخدم الحقيقية والفعالة والمحفوظة للعملية الهدف مع معرف المستخدم الحقيقي للمستدعي \fIو\fP يجب أن تتطابق معرفات المجموعة الحقيقية والفعالة والمحفوظة للعملية الهدف مع معرف المجموعة الحقيقي للمستدعي. .SH "قيمة الإرجاع" عند النجاح، تُرجع استدعاءات النظام هذه 0. عند الخطأ، يُرجع \-1، ويتم تعيين \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEFAULT\fP وسيطة مؤشر تشير إلى موقع خارج مساحة العنوان القابلة للوصول. .TP \fBEINVAL\fP القيمة المحددة في \fIresource\fP غير صالحة؛ أو، بالنسبة لـ \fBsetrlimit\fP() أو \fBprlimit\fP(): كانت \fIrlim\->rlim_cur\fP أكبر من \fIrlim\->rlim_max\fP. .TP \fBEPERM\fP حاولت عملية غير مميزة رفع الحد الصلب؛ القدرة \fBCAP_SYS_RESOURCE\fP مطلوبة لفعل ذلك. .TP \fBEPERM\fP حاول المستدعي زيادة الحد الصلب \fBRLIMIT_NOFILE\fP فوق الحد الأقصى المعرف بواسطة \fI/proc/sys/fs/nr_open\fP (انظر \fBproc\fP(5)) .TP \fBEPERM\fP (\fBprlimit\fP()) لم تملك العملية المستدعية الإذن لتعيين الحدود للعملية المحددة بواسطة \fIpid\fP. .TP \fBESRCH\fP تعذر العثور على عملية بالمعرف المحدد في \fIpid\fP. .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBgetrlimit\fP(), \fBsetrlimit\fP(), \fBprlimit\fP() T} سلامة الخيوط MT\-Safe .TE .SH المعايير .TP \fBgetrlimit\fP() .TQ \fBsetrlimit\fP() POSIX.1\-2024. .TP \fBprlimit\fP() لينكس. .P \fBRLIMIT_MEMLOCK\fP و \fBRLIMIT_NPROC\fP مشتقان من BSD وغير محددين في POSIX.1؛ هما موجودان على أنظمة BSD ولينكس، ولكن على عدد قليل من التطبيقات الأخرى. \fBRLIMIT_RSS\fP مشتق من BSD وغير محدد في POSIX.1؛ ومع ذلك فهو موجود على معظم التطبيقات. \fB\%RLIMIT_MSGQUEUE\fP، \fBRLIMIT_NICE\fP، \fBRLIMIT_RTPRIO\fP، \fBRLIMIT_RTTIME\fP، و \fB\%RLIMIT_SIGPENDING\fP خاصة بلينكس. .SH التاريخ .TP \fBgetrlimit\fP() .TQ \fBsetrlimit\fP() 4.3BSD، SVr4، SUSv1، POSIX.1\-2001 XSI، POSIX.1\-2024. .TP \fBprlimit\fP() لينكس 2.6.36، glibc 2.13. .SH ملاحظات عملية ابنة منشأة عبر \fBfork\fP(2) ترث حدود موارد والديها. حدود الموارد محفوظة عبر \fBexecve\fP(2). .P حدود الموارد هي سمات لكل عملية مشتركة بين جميع الخيوط في العملية. .P خفض الحد الناعم لمورد تحت الاستهلاك الحالي للعملية لذلك المورد سينجح (ولكن سيمنع العملية من زيادة استهلاكها للمورد أكثر). .P يمكن للمرء تعيين حدود موارد الصدفة باستخدام الأمر المدمج \fIulimit\fP (\fIlimit\fP في \fBcsh\fP(1)). حدود موارد الصدفة موروثة من قبل العمليات التي تنشئها لتنفيذ الأوامر. .P منذ لينكس 2.6.24، يمكن فحص حدود موارد أي عملية عبر \fI/proc/\fPpid\fI/limits\fP؛ انظر \fBproc\fP(5). .P قدمت الأنظمة القديمة دالة \fBvlimit\fP() بغرض مشابه لـ \fBsetrlimit\fP(). للتوافق مع الإصدارات السابقة، يوفر glibc أيضًا \fBvlimit\fP(). يجب كتابة جميع التطبيقات الجديدة باستخدام \fBsetrlimit\fP(). .SS "اختلافات ABI بين مكتبة C والنواة" منذ glibc 2.13، لم تعد دالتا الغلاف \fBgetrlimit\fP() و \fBsetrlimit\fP() في glibc تستدعيان استدعاءات النظام المقابلة، بل تستخدمان \fBprlimit\fP() بدلاً من ذلك، للأسباب الموصوفة في BUGS. .P اسم دالة الغلاف في glibc هو \fBprlimit\fP()؛ استدعاء النظام الأساسي هو \fBprlimit64\fP(). .SH العلل في أنوية لينكس الأقدم، كانت الإشارات \fBSIGXCPU\fP و \fBSIGKILL\fP التي تُسلم عندما تواجه عملية الحدين الناعم والصلب \fBRLIMIT_CPU\fP تُسلم بعد ثانية (وحدة معالجة مركزية) واحدة مما ينبغي. تم إصلاح هذا في لينكس 2.6.8. .P .\" see http://marc.theaimsgroup.com/?l=linux-kernel&m=114008066530167&w=2 في أنوية لينكس 2.6.x قبل لينكس 2.6.17، يُعامل حد \fBRLIMIT_CPU\fP بقيمة 0 بشكل خاطئ على أنه "بدون حد" (مثل \fBRLIM_INFINITY\fP). منذ لينكس 2.6.17، تعيين حد بقيمة 0 له تأثير، ولكن يُعامل فعليًا كحد قدره ثانية واحدة. .P .\" See https://lwn.net/Articles/145008/ خلل في النواة يعني أن \fBRLIMIT_RTPRIO\fP لا يعمل في لينكس 2.6.12؛ المشكلة مُصلحة في لينكس 2.6.13. .P .\" see http://marc.theaimsgroup.com/?l=linux-kernel&m=112256338703880&w=2 في لينكس 2.6.12، كان هناك عدم تطابق بفارق واحد بين نطاقات الأولوية التي تُرجعها \fBgetpriority\fP(2) و \fBRLIMIT_NICE\fP. كان لهذا تأثير أن السقف الفعلي لقيمة nice يُحسب كـ \fI19\ \-\ rlim_cur\fP. تم إصلاح هذا في لينكس 2.6.13. .P .\" The relevant patch, sent to LKML, seems to be .\" http://thread.gmane.org/gmane.linux.kernel/273462 .\" From: Roland McGrath redhat.com> .\" Subject: [PATCH 7/7] make RLIMIT_CPU/SIGXCPU per-process .\" Date: 2005-01-23 23:27:46 GMT .\" Tested Solaris 10, FreeBSD 9, OpenBSD 5.0 .\" FIXME . https://bugzilla.kernel.org/show_bug.cgi?id=50951 منذ لينكس 2.6.12، إذا وصلت عملية إلى حدها الناعم \fBRLIMIT_CPU\fP وكان لديها معالج مثبت لـ \fBSIGXCPU\fP، فبالإضافة إلى استدعاء معالج الإشارة، تزيد النواة الحد الناعم بمقدار ثانية واحدة. يتكرر هذا السلوك إذا استمرت العملية في استهلاك وقت وحدة المعالجة المركزية، حتى الوصول إلى الحد الصلب، وعندها تُقتل العملية. لا تغير التطبيقات الأخرى الحد الناعم \fBRLIMIT_CPU\fP بهذه الطريقة، وسلوك لينكس ربما لا يتوافق مع المعايير؛ يجب على التطبيقات المحمولة تجنب الاعتماد على هذا السلوك الخاص بلينكس. يُظهر الحد الخاص بلينكس \fBRLIMIT_RTTIME\fP نفس السلوك عند مواجهة الحد الناعم. .P .\" d3561f78fd379a7110e46c87964ba7aa4120235c لم تشخص أنوية لينكس قبل 2.4.22 الخطأ \fBEINVAL\fP لـ \fBsetrlimit\fP() عندما كانت \fIrlim\->rlim_cur\fP أكبر من \fIrlim\->rlim_max\fP. .P .\" لا يُرجع لينكس خطأً عندما تفشل محاولة تعيين \fBRLIMIT_CPU\fP، لأسباب تتعلق بالتوافق. .SS "تمثيل قيم حدود الموارد \[dq]الكبيرة\[dq] على منصات 32 بت" .\" Linux still uses long for limits internally: .\" c022a0acad534fd5f5d5f17280f6d4d135e74e81 .\" kernel/sys.c:do_prlimit() still uses struct rlimit which .\" uses kernel_ulong_t for its members, i.e., 32-bit on 32-bit kernel. .\" https://bugzilla.kernel.org/show_bug.cgi?id=5042 .\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=12201 تستخدم دالتا الغلاف \fBgetrlimit\fP() و \fBsetrlimit\fP() في glibc نوع بيانات \fIrlim_t\fP بعرض 64 بت، حتى على منصات 32 بت. ومع ذلك، فإن نوع البيانات \fIrlim_t\fP المستخدم في استدعاءات النظام \fBgetrlimit\fP() و \fBsetrlimit\fP() هو \fIunsigned long\fP (32 بت). علاوة على ذلك، في لينكس، تمثل النواة حدود الموارد على منصات 32 بت كـ \fIunsigned long\fP. لكن نوع بيانات 32 بت ليس واسعًا بما يكفي. الحد الأكثر صلة هنا هو \fB\%RLIMIT_FSIZE\fP، الذي يحدد الحجم الأقصى الذي يمكن أن ينمو إليه ملف: ليكون مفيدًا، يجب تمثيل هذا الحد باستخدام نوع بعرض مثل النوع المستخدم لتمثيل إزاحات الملف\[em]أي، بعرض مثل \fBoff_t\fP بعرض 64 بت (بافتراض برنامج مُجمّع مع \fI_FILE_OFFSET_BITS=64\fP). .P للتحايل على هذا القيد في النواة، إذا حاول برنامج تعيين حد مورد إلى قيمة أكبر مما يمكن تمثيله في \fIunsigned long\fP بعرض 32 بت، فإن دالة الغلاف \fBsetrlimit\fP() في glibc حولت قيمة الحد بصمت إلى \fBRLIM_INFINITY\fP. بعبارة أخرى، تم تجاهل إعداد حد المورد المطلوب بصمت. .P .\" https://www.sourceware.org/bugzilla/show_bug.cgi?id=12201 منذ إصدار glibc 2.13، يتجاوز glibc قيود استدعاءات النظام \fB\%getrlimit\fP() و \fBsetrlimit\fP() عبر تنفيذ \fBsetrlimit\fP() و \fB\%getrlimit\fP() كدوال غلاف تستدعي \fBprlimit\fP(). .SH أمثلة يوضح البرنامج التالي استخدام \fBprlimit\fP(). .P .\" SRC BEGIN (getrlimit.c) .EX #define _GNU_SOURCE #define _FILE_OFFSET_BITS 64 #include #include #include #include #include #include \& int main(int argc, char *argv[]) { pid_t pid; struct rlimit old, new; struct rlimit *newp; \& if (!(argc == 2 || argc == 4)) { fprintf(stderr, "Usage: %s [ " "]\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& pid = atoi(argv[1]); /* PID of target process */ \& newp = NULL; if (argc == 4) { new.rlim_cur = atoi(argv[2]); new.rlim_max = atoi(argv[3]); newp = &new; } \& /* Set CPU time limit of target process; retrieve and display previous limit */ \& if (prlimit(pid, RLIMIT_CPU, newp, &old) == \-1) err(EXIT_FAILURE, "prlimit\-1"); printf("Previous limits: soft=%jd; hard=%jd\[rs]n", (intmax_t) old.rlim_cur, (intmax_t) old.rlim_max); \& /* Retrieve and display new CPU time limit */ \& if (prlimit(pid, RLIMIT_CPU, NULL, &old) == \-1) err(EXIT_FAILURE, "prlimit\-2"); printf("New limits: soft=%jd; hard=%jd\[rs]n", (intmax_t) old.rlim_cur, (intmax_t) old.rlim_max); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBprlimit\fP(1), \fBdup\fP(2), \fBfcntl\fP(2), \fBfork\fP(2), \fBgetrusage\fP(2), \fBmlock\fP(2), \fBmmap\fP(2), \fBopen\fP(2), \fBquotactl\fP(2), \fBsbrk\fP(2), \fBshmctl\fP(2), \fBmalloc\fP(3), \fBsigqueue\fP(3), \fBulimit\fP(3), \fBcore\fP(5), \fBcapabilities\fP(7), \fBcgroups\fP(7), \fBcredentials\fP(7), \fBsignal\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .