В linux каждый процесс и каждого потока имеет свой 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
(Grepping для [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
Вы увидите нить преступника.