Код: Выделить всё
class Proc:
def __init__(self, cmd):
self.cmd = cmd
self.pid = None
def run(self):
proc = subprocess.Popen(self.cmd)
self.pid = proc.pid
proc.communicate()
self.pid = None
return proc.returncode
def kill(self, sig: int = signal.SIGINT):
if not self.pid:
return
proc = psutil.Process(self.pid)
if self._process_matches_self(proc):
proc.send_signal(sig)
def _process_matches_self(self, proc):
return proc.cmdline() == self.cmd
Я хотел бы вычислить хеш-значение для запущенного процесса, содержащее командную строку, среду, рабочий каталог, идентификатор процесса и время запуска. Однако даже если я сделаю это сразу после subprocess.Popen, он может пострадать от того же состояния гонки: если запущенный процесс немедленно вернется, psutil.Process может получить неправильный процесс, и я вычислю хеш-значение неправильного процесса.
Есть ли способ сделать это более атомарным? Насколько мне известно, psutil не может запускать процессы, а subprocess.Popen имеет только очень простые свойства процесса. Есть ли лучший способ сделать это?
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python