brintos

brintos / llvm-project-archived public Read only

0
0
Text · 816 B · 678457e Raw
35 lines · python
1"""2Launch a process (given through argv) similar to how a shell would do it.3"""4 5import signal6import subprocess7import sys8import os9 10 11def preexec_fn():12    # Block SIGTTOU generated by the tcsetpgrp call13    orig_mask = signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGTTOU])14 15    # Put us in a new process group.16    os.setpgid(0, 0)17 18    # And put it in the foreground.19    fd = os.open("/dev/tty", os.O_RDONLY)20    os.tcsetpgrp(fd, os.getpgid(0))21    os.close(fd)22 23    signal.pthread_sigmask(signal.SIG_SETMASK, orig_mask)24 25 26if __name__ == "__main__":27    child = subprocess.Popen(sys.argv[1:], preexec_fn=preexec_fn)28    print("PID=%d" % child.pid)29 30    _, status = os.waitpid(child.pid, os.WUNTRACED)31    print("STATUS=%d" % status)32 33    returncode = child.wait()34    print("RETURNCODE=%d" % returncode)35