Я запускаю socat
на терминале, выполнив socat - UNIX-listen:/tmp/sock
Затем я иду в другой терминал и запускаю программу (с помощью python) таким образом, что она запускается в первом терминале, вот пример:
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect("/tmp/sock")
proc=subprocess.Popen(['prg'], stdin=s, stdout=s, stderr=s, shell=False)
proc.wait()
Программы с простым вводом / выводом, например "cat", работают нормально, но более сложные (например, "vim" или "bash"), очевидно, не очень счастливы. Кроме того, когда я нажимаю Cntrl-C
на первом терминале, socat
убивается, а я предпочитаю, чтобы клавиатурное прерывание доставлялось в программу prg
(запущено в коде python выше).
Мой вопрос: если это возможно, и как это сказать socat
чтобы он вел себя так, будто prg
является владельцем терминала, а не сам socat
.
PS. Может показаться , что этот вопрос является дубликатом этого один, но это не так, потому что в этом вопросе prg
вызывается непосредственно socat
поэтому можно использовать варианты EXEC