Python: вызов process.terminate () не убивает его - PullRequest
1 голос
/ 31 марта 2011

Когда я запускаю следующий код:

p = subprocess.Popen("...", shell=True)          
if p.poll() == None:
  p.kill()

Процесс просто не убит. Я на Windows.

Я думал, что это из-за многопоточности, я запустил его в одном потоке, все то же самое.

У вас есть идеи, почему это может происходить?

Спасибо

Обновление

Я нашел код, вызывающий проблему:

while cur_time < self.time_limit:
            if p.poll() != None:
                too_much_time = False
                break
            time.sleep(0.1)
            cur_time += 0.1

Я запускаю это, чтобы убедиться, что процесс не занимает больше времени. Видимо, поэтому я не могу убить процесс.

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

Поскольку вы используете shell=True, все, что вы в итоге убиваете, - это сама оболочка (процесс cmd.exe).

Группы процессов - это относительно новая функция Windows, и я не знаю ни одного программного обеспечениякроме планировщика задач, который фактически использует их.

0 голосов
/ 31 марта 2011

Может быть, команда, которую вы запускаете, устанавливает сигма-маску на игнорирование сигнала уничтожения. Можете ли вы попробовать с другой командой? например, создать сценарий, который спит бесконечно долго, и попытаться убить это

offtopic, я думаю, что shell arg ничего не значит для windows

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...