4

私のubuntuサーバーで、次のコマンドを実行します。

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

これは、pid5555が実行されているかどうかを確認できるようにするために行われます。私の理解では、pidが実行されていない場合、これによりOSErrorが発生するはずです。これは私にとってOSErrorを引き起こしていません。つまり、実行中のプロセスである必要があります。しかし、私が実行すると:

ps aux | grep 5555

そのpidで実行されているプロセスは表示されません。これは、その一般的な範囲の他のいくつかのpidでも発生しますが、たとえば555または55555では発生しません。

os.killが期待どおりにOSErrorを発生させない理由について誰かが洞察を持っていますか?

注:これはPython2.5.1で実行されています。

4

4 に答える 4

7

Linuxでは、各プロセス各スレッドに異なるpidがあります。 os.killスレッドpidとタスクpidのどちらがあるかはps関係ありませんが、通常はスレッドpidは表示されません。

たとえば、私のマシンでは、PID8502のプロセスがスレッドを実行しています。これは次のように表示されます。

$ 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

(Greping for[8]503は、が表示されないことを意味しgrepます-これは古いUNIXのトリックです!)

それが生きているかどうかを見てみましょう

$ 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

犯人のスレッドが表示されます。

于 2009-12-01T19:23:23.493 に答える
1

htopをインストールしてみてください(sudo apt-get install htop)。psでは表示されないプロセスが表示されることがあります。

于 2009-12-01T15:31:14.693 に答える
1

多分それは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/pipermail/new-bugs-announce/2009-February/004222.html

于 2009-12-01T15:35:52.937 に答える
0

場合によってはOSErrorが発生しない理由はわかりませんが、LinuxおよびUNIXベースのOSには最大pid値があることに注意することが重要です。

$> cat /proc/sys/kernel/pid_max
32768
于 2009-12-01T15:57:30.320 に答える