Python: вызов process.terminate () не убивает его

1

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

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

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

  • 0
    @nmichaels, я пробовал оба. Ни то, ни другое не работает. И они делают то же самое в Windows, согласно документации.
  • 0
    Что именно вы имеете в виду «я не могу убить процесс»: цикл нигде не содержит p.kill() и вы сказали, что существует один поток. cur_time, self.time_limit в цикле.
Показать ещё 1 комментарий
Теги:
process
terminate

2 ответа

2
Лучший ответ

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

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

  • 0
    Спасибо вам большое! Действительно, в этом причина. Я даже не думал о параметре оболочки. Почему я даже использовал это?
0

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

offtopic, я думаю, что shell arg ничего не означает в окнах

  • 0
    Я запускаю цикл, пока программа не остановится. Если он не остановится в течение n секунд, я убью его. Проблема в том, что он не хочет быть убитым.
  • 0
    правильно; Я пытался уменьшить голос, но он не работает :) Возможно, команда, которую вы запускаете, устанавливает сигма-маску на игнорирование сигнала уничтожения. Можете ли вы попробовать с другой командой? например, сделать сценарий, который спит в бесконечное время, и попытаться убить это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню