Я написал некоторый код для запуска сценария (через подпроцесс) и уничтожения дочернего процесса после определенного времени ожидания. Я запускаю скрипт под названием «runtime_hang_script.sh», который просто содержит «./runtime_hang», который запускает бесконечный цикл. Я также перенаправляю stdout в канал - я планирую записать его как в sys.stdout, так и в файл (иначе я пытаюсь реализовать tee). Однако мой код зависает после истечения времени ожидания подпроцесса. Обратите внимание, что это зависает ТОЛЬКО при запуске "sh runtime_hang_script.sh", а не "./runtime_hang." Кроме того, это не зависает, когда я пытаюсь передать напрямую в файл или когда я не читаю из канала.
Я пробовал другие реализации создания временного подпроцесса, но я продолжаю сталкиваться с той же проблемой. Я даже пытался поднять сигнал в конце проблемы - по какой-то причине сигнал повышается раньше, чем ожидалось, поэтому это тоже не работает. Любая помощь будет оценена. Заранее спасибо!
process = None
def run():
global process
timeout_secs = 5
args = ['sh', 'runtime_hang_script.sh']
sys.stdout.flush()
process = subprocess.Popen(args, stdout=subprocess.PIPE, bufsize=1)
with process.stdout:
for line in iter(process.stdout.readline, b''):
sys.stdout.write(line.decode('utf-8'))
sys.stdout.flush()
process.wait()
proc_thread = threading.Thread(target=run)
proc_thread.start()
proc_thread.join(5)
print(proc_thread.is_alive())
if proc_thread.is_alive():
process.kill()