Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | import os |
| 3 | import sys |
| 4 | import subprocess |
| 5 | |
| 6 | # Detach from the controlling terminal and parent process by forking twice to daemonize ourselves, |
| 7 | # then run the command passed as argv[1]. Send log data to argv[2]. |
| 8 | |
| 9 | pid = os.fork() |
| 10 | if (pid == 0): |
| 11 | os.setsid() |
| 12 | pid = os.fork() |
| 13 | if (pid != 0): |
| 14 | os._exit(0) |
| 15 | else: |
| 16 | sys.exit() |
| 17 | |
| 18 | |
| 19 | si = file(os.devnull, 'r') |
| 20 | so = file(sys.argv[2], 'w') |
| 21 | se = so |
| 22 | |
| 23 | # Replace those fds with our own |
| 24 | os.dup2(si.fileno(), sys.stdin.fileno()) |
| 25 | os.dup2(so.fileno(), sys.stdout.fileno()) |
| 26 | os.dup2(se.fileno(), sys.stderr.fileno()) |
| 27 | |
| 28 | ret = subprocess.call(sys.argv[1], shell=True) |
| 29 | |
| 30 | os._exit(ret) |
| 31 | |