When the child process exits, this helper exits too.
-usage: daemon-helper <signal> [--kill-group] [nostdin] command...
+Usage:
+ daemon-helper <signal> [--kill-group] [nostdin] COMMAND ...
"""
import fcntl
import struct
import subprocess
import sys
-
+from argparse import ArgumentParser
+
+parser = ArgumentParser(epilog=
+ 'The remaining parameters are the command to be run. If these\n' +
+ 'parameters start wih nostdin, then no stdin input is expected.')
+parser.add_argument('signal')
+parser.add_argument('--kill-group', action='store_true',
+ help='kill all processes in the group')
+parser.add_argument('--nostdin', action='store_true',
+ help='no stdin input expected')
+parsed, args = parser.parse_known_args()
end_signal = signal.SIGKILL
-if sys.argv[1] == "term":
+if parsed.signal == 'term':
end_signal = signal.SIGTERM
+group = parsed.kill_group
+nostdin = parsed.nostdin
+skip_nostdin = 0
+try:
+ if args[0] == 'nostdin':
+ nostdin = True
+ skip_nostdin = 1
+except IndexError:
+ print 'No command specified'
+ sys.exit(1)
-cmd_start = 2
-
-group = False
-if sys.argv[cmd_start] == "--kill-group":
- group = True
- cmd_start += 1
-
-nostdin = False
-if sys.argv[cmd_start] == "nostdin":
- nostdin = True
- cmd_start += 1
proc = None
if nostdin:
+ if len(args) - skip_nostdin == 0:
+ print 'No command specified'
+ sys.exit(1)
proc = subprocess.Popen(
- args=sys.argv[cmd_start:],
+ args=args[skip_nostdin:],
)
else:
with file('/dev/null', 'rb') as devnull:
proc = subprocess.Popen(
- args=sys.argv[cmd_start:],
+ args=args,
stdin=devnull,
preexec_fn=os.setsid,
)