Merge branch 'master' into 2882-job-process-stats refs #2882
[arvados.git] / services / fuse / bin / arv-mount
index f6b2992782ef51b9efd737bd23a4dbe98c5e86c6..b4afffab061fc2ceaf56bc7dcb93a105fa3d93cb 100755 (executable)
@@ -5,6 +5,7 @@ import arvados
 import subprocess
 import argparse
 import daemon
+import signal
 
 if __name__ == '__main__':
     # Handle command line parameters
@@ -66,7 +67,20 @@ collections on the server.""")
 
         rc = 255
         try:
-            rc = subprocess.call(args.exec_args, shell=False)
+            sp = subprocess.Popen(args.exec_args, shell=False)
+
+            # forward signals to the process.
+            signal.signal(signal.SIGINT, lambda signum, frame: sp.send_signal(signum))
+            signal.signal(signal.SIGTERM, lambda signum, frame: sp.send_signal(signum))
+            signal.signal(signal.SIGQUIT, lambda signum, frame: sp.send_signal(signum))
+
+            # wait for process to complete.
+            rc = sp.wait()
+
+            # restore default signal handlers.
+            signal.signal(signal.SIGINT, signal.SIG_DFL)
+            signal.signal(signal.SIGTERM, signal.SIG_DFL)
+            signal.signal(signal.SIGQUIT, signal.SIG_DFL)
         except OSError as e:
             sys.stderr.write('arv-mount: %s -- exec %s\n' % (str(e), args.exec_args))
             rc = e.errno
@@ -82,7 +96,7 @@ collections on the server.""")
             llfuse.init(operations, args.mountpoint, opts)
             llfuse.main()
         else:
+            # Initialize the fuse connection
+            llfuse.init(operations, args.mountpoint, opts)
             with daemon.DaemonContext():
-                # Initialize the fuse connection
-                llfuse.init(operations, args.mountpoint, opts)
                 llfuse.main()