31 lines
		
	
	
		
			609 B
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			609 B
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| import os
 | |
| import sys
 | |
| 
 | |
| # Detach from the controlling terminal and parent process by forking twice to daemonize ourselves,
 | |
| # then run the command passed as argv[1]. Send log data to argv[2].
 | |
| 
 | |
| pid = os.fork()
 | |
| if (pid == 0):
 | |
|     os.setsid()
 | |
|     pid = os.fork()
 | |
|     if (pid != 0):
 | |
|         os._exit(0)
 | |
| else:
 | |
|     sys.exit()
 | |
| 
 | |
| 
 | |
| si = file(os.devnull, 'r')
 | |
| so = file(sys.argv[2], 'w')
 | |
| se = so
 | |
| 
 | |
| # Replace those fds with our own
 | |
| os.dup2(si.fileno(), sys.stdin.fileno())
 | |
| os.dup2(so.fileno(), sys.stdout.fileno())
 | |
| os.dup2(se.fileno(), sys.stderr.fileno())
 | |
| 
 | |
| ret = os.system(sys.argv[1])
 | |
| 
 | |
| os._exit(ret)
 | |
| 
 | 
