"""
Launch a process (given through argv) similar to how a shell would do it.
"""
import signal
import subprocess
import sys
import os
def preexec_fn():
# Block SIGTTOU generated by the tcsetpgrp call
orig_mask = signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGTTOU])
# Put us in a new process group.
os.setpgid(0, 0)
# And put it in the foreground.
fd = os.open("/dev/tty", os.O_RDONLY)
os.tcsetpgrp(fd, os.getpgid(0))
os.close(fd)
signal.pthread_sigmask(signal.SIG_SETMASK, orig_mask)
if __name__ == "__main__":
child = subprocess.Popen(sys.argv[1:], preexec_fn=preexec_fn)
print("PID=%d" % child.pid)
_, status = os.waitpid(child.pid, os.WUNTRACED)
print("STATUS=%d" % status)
returncode = child.wait()
print("RETURNCODE=%d" % returncode)