У меня есть программа на C ++, которая называется C и предназначена для отключения при получении сигнала SIGINT.Я написал программу на Python P , которая запускает C в качестве подпроцесса.Я хочу, чтобы P остановился C .Я попробовал 3 вещи, и я хотел бы знать, почему некоторые из них не работают.
Попытка # 1:
import subprocess
import signal
import os
p = subprocess.Popen(...)
...
os.killpg(p.pid, signal.SIGINT)
Этот код дает мне ошибку
OSError [Errno 3]: Нет такого процесса`
, хотя p.pid
соответствует pid
, отображаемому как ps .
Попытка № 2:
import subprocess
import signal
import os
p = subprocess.Popen(...)
...
os.system('kill -SIGINT %u' % p.pid)
Это дает мне ошибку
sh: kill: bad signal`
, хотя kill -SIGINT <pid>
работает стерминал.
Попытка # 3:
import subprocess
import signal
import os
p = subprocess.Popen(...)
...
os.system('kill -2 %u' % p.pid)
Это работает.
Мой вопрос: почему не сработали # 1 и # 2?
Редактировать: мое первоначальное предположение заключалось в том, что, поскольку в документации для os.kill()
написано New in version 2.7: Windows support
, я подумал, что os.kill()
(а) впервые доступен в 2.7 и (б) работает в Windows.Прочитав ответы ниже, я запустил os.kill()
на Solaris, что я должен был сделать в первую очередь, извините, и он работает в 2.4.Очевидно, что документация означает, что поддержка Windows является новой в 2.7.Opps.