CHERRY-PICK: Add signal handler in camera test fixture

The current autotest framework doesn't register signal handler by
default.  So it doesn't release python-level resources once a test is
killed with SIGTERM (for example, OpenCV doesn't release camera device
correctly with SIGTERM).

BUG=chrome-os-partner:19583
TEST=Manually
1. Run the test
2. Stop the test on the left pane when camera is capturing images.
3. On some platform, camera may stop working if it was not closed properly.

Change-Id: I40863e69a8541338e0aad0ec0c45273fdd5518fc
(cherry picked from commit 6eb701c09dbec9a4b330824ec1523d3a5c52bd4d)
Reviewed-on: https://gerrit.chromium.org/gerrit/56019
Commit-Queue: Justin Chuang <jchuang@chromium.org>
Reviewed-by: Justin Chuang <jchuang@chromium.org>
Tested-by: Justin Chuang <jchuang@chromium.org>
diff --git a/client/site_tests/factory_CameraPerformanceAls/factory_CameraPerformanceAls.py b/client/site_tests/factory_CameraPerformanceAls/factory_CameraPerformanceAls.py
index 6425d03..0ce7b76 100644
--- a/client/site_tests/factory_CameraPerformanceAls/factory_CameraPerformanceAls.py
+++ b/client/site_tests/factory_CameraPerformanceAls/factory_CameraPerformanceAls.py
@@ -18,6 +18,7 @@
 import re
 import select
 import serial
+import signal
 import StringIO
 import subprocess
 import threading
@@ -854,6 +855,12 @@
         '''
         factory.log('%s run_once' % self.__class__)
 
+        # Add signal handler to close opened camera interface when get killed
+        # TODO: this should be done in autotest framework instead
+        signal_handler = lambda signum, frame: sys.exit(1)
+        signal.signal(signal.SIGTERM, signal_handler)
+        signal.signal(signal.SIGINT, signal_handler)
+
         # Initialize variables and environment.
         assert test_type in [_TEST_TYPE_FULL, _TEST_TYPE_AB, _TEST_TYPE_MODULE]
         assert unit_test in [True, False]