kill(2)

الاسم
kill - إرسال إشارة إلى عملية

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

موجز
#include <signal.h>

int kill(pid_t pid, int sig);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

kill():
    _POSIX_C_SOURCE

الوصف
يمكن استخدام استدعاء النظام kill() لإرسال أي إشارة إلى أي مجموعة عمليات أو عملية.

إذا كان pid موجبًا، فتُرسل الإشارة sig إلى العملية ذات المعرف المحدد بواسطة pid.

إذا كان pid يساوي 0، فتُرسل sig إلى كل عملية في مجموعة عمليات العملية المستدعية.

إذا كان pid يساوي -1، فتُرسل sig إلى كل عملية تملك العملية المستدعية صلاحية إرسال الإشارات إليها، باستثناء العملية 1 (init)، ولكن انظر أدناه.

إذا كان pid أقل من -1، فتُرسل sig إلى كل عملية في مجموعة العمليات التي معرفها هو -pid.

إذا كان sig هو 0، فلا تُرسل أي إشارة، ولكن تُجرى فحوصات الوجود والصلاحية؛ يمكن استخدام هذا للتحقق من وجود معرف عملية أو معرف مجموعة عمليات يسمح للمستدعي بإرسال إشارة إليه.

لكي تملك عملية صلاحية إرسال إشارة، يجب أن تكون إما مميزة (تحت لينكس: تمتلك القدرة CAP_KILL في مساحة اسم المستخدم للعملية الهدف)، أو أن يكون معرف المستخدم الحقيقي أو الفعلي للعملية المرسلة مساويًا لمعرف المستخدم الحقيقي أو المحفوظ للعملية الهدف. في حالة SIGCONT، يكفي أن تنتمي العمليتان المرسلة والمستقبلة إلى نفس الجلسة. (تاريخيًا، كانت القواعد مختلفة؛ انظر التاريخ.)

قيمة الإرجاع
عند النجاح، يُعاد صفر. إذا أُرسلت إشارات إلى مجموعة عمليات، يعني النجاح أنه تم تسليم إشارة واحدة على الأقل. عند الخطأ، يُعاد -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EINVAL
    عُيّنت إشارة غير صالحة.

EPERM
    لا تملك العملية المستدعية صلاحية إرسال الإشارة إلى أي من العمليات الهدف.

ESRCH
    العملية الهدف أو مجموعة العمليات الهدف غير موجودة. لاحظ أن العملية الموجودة قد تكون زومبي، وهي عملية أنهت التنفيذ ولكن لم يُنتظر عليها بعد باستخدام wait(2).

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

التاريخ
4.3BSD، SVr4، POSIX.1-1988.

  ملاحظات لينكس
عبر إصدارات النواة المختلفة، فرضت لينكس قواعد مختلفة للصلاحيات المطلوبة لعملية غير مميزة لإرسال إشارة إلى عملية أخرى. في لينكس 1.0 إلى 1.2.2، يمكن إرسال إشارة إذا تطابق معرف المستخدم الفعلي للمرسل مع معرف المستخدم الفعلي للهدف، أو تطابق معرف المستخدم الحقيقي للمرسل مع معرف المستخدم الحقيقي للهدف. من لينكس 1.2.3 حتى 1.3.77، يمكن إرسال إشارة إذا تطابق معرف المستخدم الفعلي للمرسل مع أي من معرف المستخدم الحقيقي أو الفعلي للهدف. القواعد الحالية، التي تتوافق مع POSIX.1، تم اعتمادها في لينكس 1.3.78.

ملاحظات
الإشارات الوحيدة التي يمكن إرسالها إلى معرف العملية 1، عملية init، هي تلك التي قامت init بتثبيت معالجات إشارات لها بشكل صريح. يُفعل ذلك لضمان عدم تعطل النظام عن طريق الخطأ.

يتطلب POSIX.1 أن ترسل kill(-1,sig) الإشارة sig إلى جميع العمليات التي يمكن للعملية المستدعية إرسال إشارات إليها، باستثناء بعض عمليات النظام المحددة بالتنفيذ. تسمح لينكس لعملية بإرسال إشارة لنفسها، ولكن في لينكس لا ترسل الاستدعاء kill(-1,sig) إشارة إلى العملية المستدعية.

يتطلب POSIX.1 أنه إذا أرسلت عملية إشارة إلى نفسها، ولم يكن الخيط المرسل قد حجب الإشارة، ولم يقم أي خيط آخر بإلغاء حجبها أو انتظارها في sigwait(3)، فيجب تسليم إشارة واحدة على الأقل غير محجوبة إلى الخيط المرسل قبل أن يعيد kill().

العلل
في لينكس 2.6 حتى لينكس 2.6.7، كان هناك خطأ يعني أنه عند إرسال إشارات إلى مجموعة عمليات، فشلت kill() مع الخطأ EPERM إذا لم يكن لدى المستدعي صلاحية إرسال الإشارة إلى أي (بدلاً من جميع) أعضاء مجموعة العمليات. على الرغم من هذا الإرجاع الخطأ، كانت الإشارة لا تزال تُسلم إلى جميع العمليات التي كان لدى المستدعي صلاحية إرسال إشارة إليها.

انظر أيضًا
kill(1), _exit(2), pidfd_send_signal(2), signal(2), tkill(2), exit(3), killpg(3), sigqueue(3), capabilities(7), credentials(7), signal(7)

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

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

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