KILL(1)

الاسم
kill - إنهاء عملية

موجز

kill [-إشارة|-s إشارة|-p] [-q قيمة] [-a] [--timeout مللي_ثانية إشارة] [--] PID|PID:_inode_واصف_الملف_|اسم...

kill [-إشارة|-s إشارة] PID|PID:_inode_واصف_الملف_...

kill -l [رقم|0xsigmask] | -L

kill -d معرّف-العملية

الوصف

يُرسل الأمر kill الـ signal المحددة إلى العمليات أو مجموعات العمليات المحددة.

إذا لم تُحدد إشارة، تُرسل إشارة TERM. الإجراء المبدئي لهذه الإشارة هو إنهاء العملية. يُفضل استخدام هذه الإشارة على إشارة KILL (رقم 9)، حيث قد تُثبّت العملية معالجاً لإشارة TERM لتنفيذ خطوات التنظيف قبل الإنهاء بشكل منظم. إذا لم تنتهِ العملية بعد إرسال إشارة TERM، فيمكن حينها استخدام إشارة KILL؛ كُن على علم بأن الإشارة الأخيرة لا يمكن اعتراضها، ولذا لا تمنح العملية المستهدفة الفرصة لإجراء أي تنظيف قبل الإنهاء.

تمتلك معظم الـ صدفات الحديثة أمر kill داخلياً، مع طريقة استخدام مشابهة للأمر الموصوف هنا. تُعد الخيارات --all و --pid و --queue، وإمكانية تحديد العمليات باسم الأمر، امتدادات محلية.

إذا كانت الـ signal هي 0، فلا تُرسل إشارة فعلية، ولكن يظل التحقق من الأخطاء جارياً.

المعطيات

يمكن أن تكون قائمة العمليات المراد إرسال الإشارة إليها خليطاً من الأسماء ومعرّفات العمليات PIDs.

معرّف-العملية
    يمكن التعبير عن كل معرّف-العملية بإحدى الطرق التالية:

    n
        حيث n أكبر من 0. تُرسل الإشارة إلى العملية ذات المعرف n.

    0
        تُرسل الإشارة إلى كافة العمليات في مجموعة العمليات الحالية.

    -1
        تُرسل الإشارة إلى كافة العمليات التي تملك معرّف PID أكبر من 1.

    -n
        حيث n أكبر من 1. تُرسل الإشارة إلى كافة العمليات في مجموعة العمليات n. عند إعطاء وسيط بصيغة '-n' ويُقصد به الإشارة لمجموعة عمليات، يجب إما تحديد إشارة أولاً، أو أن يُسبق الوسيط بخيار '--'، وإلا فسيُعتبر بمثابة الإشارة المطلوب إرسالها.

PID:_inode_واصف_الملف_
    يمكن الإشارة إلى العملية من خلال معرفها (pid) بالإضافة إلى رقم inode الخاص بواصف ملف العملية (pidfd_inode) بالتنسيق (pid:pidfd_inode)، لتعريفها بشكل فريد وإرسال الإشارات دون حدوث سباق. يعمل هذا فقط مع الخيارات -s، و --signal، و -إشارة. يتطلب إصدار النواة 6.9 وما بعده.

اسم
    تُرسل الإشارة إلى كافة العمليات التي استُدعيت باستخدام هذا الـ اسم.

الخيارات

-s، --signal الإشارة
    الإشارة المراد إرسالها. يمكن إعطاؤها كاسم أو رقم.

-l، --list [رقم|0xsigmask]
    اطبع قائمة بأسماء الإشارات، أو حوّل رقم الإشارة المعطى إلى اسم، أو حوّل قناع الإشارة المعطى إلى أسماء. يمكن العثور على الإشارات في /usr/include/linux/signal.h.

        $ ps s $$
          UID     PID          PENDING          BLOCKED          IGNORED           CAUGHT STAT TTY        TIME COMMAND
         1000 1608069 0000000000000000 0000000000000002 0000000000384000 0000000008013003 Ss   pts/44     0:02 zsh
        $ kill -l 0x0000000000384000
        TERM
        TSTP
        TTIN
        TTOU

    إذا لم يُعطَ رقم ولا 0xقناع_إشارة، تُسرد جميع أسماء الإشارات. وفي هذه الحالة، تُطبع إشارة واحدة لكل سطر عندما لا يكون المخرج طرفية.

-L، --table
    مشابه لـ -l، لكنه يطبع أسماء الإشارات والأرقام المقابلة لها. تُطبع إشارة واحدة لكل سطر عندما لا يكون المخرج طرفية.

-a، --all
    لا تقيد تحويل اسم الأمر إلى معرف العملية (PID) بالعمليات التي لها نفس معرف المستخدم (UID) للعملية الحالية.

-p، --pid
    اطبع معرف العملية (PID) للعمليات المذكورة فقط، ولا ترسل أي إشارات.

-r، --require-handler
    لا ترسل الإشارة إذا لم تُلتقط في مساحة المستخدم من قبل العملية المُشار إليها.

--verbose
    اطبع معرف (أو معرفات) العملية التي ستُرسل إليها إشارة بواسطة kill مع الإشارة.

-q، --queue قيمة
    أرسل الإشارة باستخدام sigqueue(3) بدلاً من kill(2). المعطى قيمة هو عدد صحيح يُرسل مع الإشارة. إذا كانت العملية المستلمة قد ثبتت معالجاً لهذه الإشارة باستخدام علم SA_SIGINFO لـ sigaction(2)، فيمكنها الحصول على هذه البيانات عبر حقل si_sigval في بنية siginfo_t.

--timeout إشارة مللي ثانية
    أرسل إشارة محددة بالطريقة المعتادة إلى عملية ما، تتبعها إشارة إضافية بعد تأخير محدد. يتسبب خيار --timeout في انتظار kill لمدة محددة بـ مللي_ثانية قبل إرسال signal تالية إلى العملية. نُفذت هذه الميزة باستخدام ميزة واصف ملف PID لنواة لينكس لضمان إرسال الإشارة اللاحقة إلى نفس العملية أو عدم إرسالها إذا لم تعد العملية موجودة.

    لاحظ أن نظام التشغيل قد يعيد استخدام معرفات العمليات (PIDs) وإن تنفيذ ميزة مماثلة في صدفة باستخدام kill و sleep سيكون عرضة لظروف التسابق حيث قد تُرسل الإشارة اللاحقة إلى عملية مختلفة استخدمت معرف PID مُعاد تدويره.

    يمكن تحديد خيار --timeout مرات متعددة: تُرسل الإشارات بالتسلسل مع فترات المهلة المحددة. يمكن دمج خيار --timeout مع خيار --queue.

    كمثال، يرسل الأمر التالي الإشارات QUIT و TERM و KILL بالتسلسل وينتظر 1000 مللي ثانية بين إرسال الإشارات:

        kill --verbose --timeout 1000 TERM --timeout 1000 KILL \
                --signal QUIT 12345

-d، --show-process-state معرّف-العملية
    فك ترميز الحقول المتعلقة بالإشارات في /proc/pid/status.

        $ kill -d $$
        Blocked: INT
        Ignored: TERM TSTP TTIN TTOU
        Caught: HUP INT PIPE ALRM CHLD WINCH

-h، --help
    اعرض نص المساعدة ثم اخرج.

-V، --version
    اعرض الإصدار واخرج.

حالة الخروج

kill له قيم حالة الخروج التالية:

0
    نجاح

1
    فشل

64
    نجاح جزئي (عند تحديد أكثر من عملية واحدة)

ملاحظات

على الرغم من أنه من الممكن تحديد معرف الخيط (TID، انظر gettid(2)) لأحد الخيوط في عملية متعددة الخيوط كمعطى لـ kill، إلا أن الإشارة تُوجه مع ذلك إلى العملية (أي كامل مجموعة الخيوط). بمعنى آخر، لا يمكن إرسال إشارة إلى خيط محدد صراحة في عملية متعددة الخيوط. ستُسلم الإشارة إلى خيط مختار عشوائياً في العملية المستهدفة لا يحجب الإشارة. لمزيد من التفاصيل، انظر signal(7) ووصف CLONE_THREAD في clone(2).

توفر صدفات متنوعة أمر kill مدمجاً يُفضل استخدامه بدلاً من الملف التنفيذي kill(1) الموصوف في هذا الدليل. أسهل طريقة لضمان تنفيذ الأمر الموصوف في هذه الصفحة هي استخدام المسار الكامل عند استدعاء الأمر، على سبيل المثال: /bin/kill --version

المؤلفين

أُخذت النسخة الأصلية من BSD 4.4.

انظر أيضاً

bash(1)، tcsh(1)، sigaction(2)، kill(2)، sigqueue(3)، signal(7) proc(5) proc_pid_status(5)

التبليغ عن الأخطاء

لتقارير العِلل، استخدم

التوفر

الأمر kill جزء من حزمة util-linux التي يمكن تنزيلها من