У меня цепь из трех процессов: процесс A вызывает B, чтобы порождать C, затем B умирает. Мы можем назвать B «мостом» между двумя системами A и C.Python; popen не проходит std *
Я хочу убедиться, что C не наследует никаких дескрипторов файлов, которые открывается A, чтобы предотвратить зомбинг, который я наблюдаю в настоящее время (иногда A вызывает B, чтобы убить C, и после этого, я вижу, что несуществующие процессы C висят вокруг, но я не знаю, как выглядит код в A).
Чтобы убедиться, что эта проблема не из-за стандартный ввод/из/ERR передаются вниз, настоящее время я делаю следующее B
def _close_fds(): #workaround carstens bug
for fd in [0, 1, 2]:
try:
os.close(fd)
except Exception:
logger.info("File descriptor was not open")
...
_close_fds() #make sure there are no open file descriptors for the chile to enherit
pid = subprocess.Popen([_ROOT_PATH + "something.py"]).pid
...
Есть ли лучший способ сделать это?
Вы только закрываете stdin, stdout и stderr. Если какие-либо другие дескрипторы файлов были открыты, они останутся открытыми, но вы их не найдете. – alexis