OS.Kill لا ترفع OSERROR، ومع ذلك، لا أرى PID قيد التشغيل

StackOverflow https://stackoverflow.com/questions/1826824

  •  11-09-2019
  •  | 
  •  

سؤال

على خادم Ubuntu الخاص بي، قمت بتشغيل الأمر التالي:

python -c 'import os; os.kill(5555, 0)'

يتم ذلك حتى أتمكن من معرفة ما إذا كان PID 5555 قيد التشغيل. من فهمي هذا يجب أن يرفع OSERROR إذا لم يتم تشغيل PID. هذا لا يرفع OSERROR بالنسبة لي مما يعني أنه يجب أن يكون عملية قيد التشغيل. ومع ذلك عندما أركض:

ps aux | grep 5555

لا أرى أي عملية تعمل مع تلك PID. يحدث هذا أيضا على العديد من البلاستيك الأخرى في هذا النطاق العام، لكنه لا يحدث مع القول 555 أو 55555.

هل لدى أي شخص أي نظرة ثاقبة حول سبب عدم تربية OS.Kill من المتوقع أن يزيد ذلك؟

ملاحظة: هذا يعمل تحت Python 2.5.1.

هل كانت مفيدة؟

المحلول

تحت لينكس، كل عملية و كل مؤشر ترابط لديه pid مختلفة. os.kill لا يهتم ما إذا كان لديك PID موضوع، أو PID مهمة، ولكن ps لا تظهر عادة pids الموضوع.

على سبيل المثال، على جهازي، فإن عملية PID 8502 هي تشغيل مؤشرات الترابط التي يمكنك أن ترى مثل هذا

$ ls /proc/8502/task/
8502  8503  8504  8505  8506  8507  8511  8512  8514  8659

لاحظ أن 8503 لا يظهر في قائمة العملية

$ ps aux | grep [8]503
$

ومع ذلك باستخدام بعض أكثر ps الحجج التي يمكنك رؤيتها

$ ps -eLf | grep [8]503
ncw       8502     1  8503  0   10 10:00 ?        00:00:00 /usr/lib/virtualbox/VBoxSVC --automate

(الآثار ل [8]503 يعني أن grep لن تظهر - إنها خدعة يونكس القديمة!)

الآن دعونا نرى ما إذا كان على قيد الحياة أم لا

$ python
Python 2.6.4 (r264:75706, Nov  2 2009, 14:44:17)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Loaded customisations from '/home/ncw/.pystartup'
>>> import os
>>> os.kill(8503, 0)
>>>

هذا يكرر مشكلتك.

أعتقد إذا قمت بذلك

ls /proc/*/task/5555

أو

ps -eLf | grep [5]555

سترى موضوع الجاني.

نصائح أخرى

حاول تثبيت HTOP (Sudo Apt-Get تثبيت HTOP)، فإنه يعرض في بعض الأحيان العملية التي لا.

ربما يكون خطأ في 2.5؟ في 2.6.4 أحصل على:

gruszczy@gruszczy-laptop:~$ python -c 'import os; os.kill(5555, 0)'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
OSError: [Errno 3] No such process

أعتقد، هناك تقرير خطأ لهذا:

http:/mail.python.org/pipmail/new-bugs-announce/2009-february/004222.html.

لا أعرف لماذا لا يتم رفع أوسفرور في بعض الحالات، ولكن من المهم أن نلاحظ وجود قيمة PID القصوى على نظام التشغيل Linux و UNIX:

$> cat /proc/sys/kernel/pid_max
32768
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top