Record signals a different way
authorPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 8 Jul 2014 18:06:15 +0000 (14:06 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 8 Jul 2014 18:06:15 +0000 (14:06 -0400)
crunch_scripts/run-command

index 2eba372357fe95ab5228bd285ee3264a2fe0427c..71a9f963affdfed0efa4241accad45a78725d1c9 100755 (executable)
@@ -52,9 +52,13 @@ def machine_progress(bytes_written, bytes_expected):
     return "run-command: {} written {} total\n".format(
         bytes_written, -1 if (bytes_expected is None) else bytes_expected)
 
     return "run-command: {} written {} total\n".format(
         bytes_written, -1 if (bytes_expected is None) else bytes_expected)
 
-def send_signal(sp, signum, sig):
-    sp.send_signal(signum)
-    sig.append(signum)
+class SigHandler(object):
+    def __init__(self):
+        self.sig = None
+
+    def send_signal(self, sp, signum, sig):
+        sp.send_signal(signum)
+        self.sig = signum
 
 try:
     cmd = []
 
 try:
     cmd = []
@@ -70,16 +74,18 @@ try:
     print("run-command: {}{}".format(' '.join(cmd), (" > " + stdoutname) if stdoutname != None else ""))
 
     sp = subprocess.Popen(cmd, shell=False, stdout=stdoutfile)
     print("run-command: {}{}".format(' '.join(cmd), (" > " + stdoutname) if stdoutname != None else ""))
 
     sp = subprocess.Popen(cmd, shell=False, stdout=stdoutfile)
-    sig = []
+    sig = SigHandler()
 
     # forward signals to the process.
 
     # forward signals to the process.
-    signal.signal(signal.SIGINT, lambda signum, frame: send_signal(sp, signum, sig))
-    signal.signal(signal.SIGTERM, lambda signum, frame: send_signal(sp, signum, sig))
-    signal.signal(signal.SIGQUIT, lambda signum, frame: send_signal(sp, signum, sig))
+    signal.signal(signal.SIGINT, lambda signum, frame: sig.send_signal(sp, signum))
+    signal.signal(signal.SIGTERM, lambda signum, frame: sig.send_signal(sp, signum))
+    signal.signal(signal.SIGQUIT, lambda signum, frame: sig.send_signal(sp, signum))
 
     # wait for process to complete.
     rcode = sp.wait()
 
 
     # wait for process to complete.
     rcode = sp.wait()
 
+    print("sig is %s" % sig.sig)
+
     if len(sig) > 0:
         print("run-command: terminating on signal %s" % sig[0])
         sys.exit(rcode)
     if len(sig) > 0:
         print("run-command: terminating on signal %s" % sig[0])
         sys.exit(rcode)