mandos: Use multiprocessing module to run checkers.
For a long time, the Mandos server has occasionally logged the message "ERROR: Child process vanished". This was never a fatal error, but it has been annoying and slightly worrying, since a definite cause was not found. One potential cause could be the "multiprocessing" and "subprocess" modules conflicting w.r.t. SIGCHLD. To avoid this, change the running of checkers from using subprocess.Popen asynchronously to instead first create a multiprocessing.Process() (which is asynchronous) calling a function, and have that function then call subprocess.call() (which is synchronous). In this way, the only thing using any asynchronous subprocesses is the multiprocessing module.
This makes it necessary to change one small thing in the D-Bus API, since the subprocesses.call() function does not expose the raw wait(2) status value.
DBUS-API (CheckerCompleted): Change the second value provided by this D-Bus signal from the raw wait(2) status to the actual terminating signal number. mandos (subprocess_call_pipe): New function to be called by multiprocessing.Process (starting a separate process). (Client.last_checker signal): New attribute for signal which terminated last checker. Like last_checker_status, only not accessible via D-Bus. (Client.checker_callback): Take new "connection" argument and use it to get returncode; set last_checker_signal. Return False so gobject does not call this callback again. (Client.start_checker): Start checker using a multiprocessing.Process instead of a subprocess.Popen. (ClientDBus.checker_callback): Take new "connection" argument. Call Client.checker_callback early to have it set last_checker_status and last_checker_signal; use those. Change second value provided to D-Bus signal CheckerCompleted to use last_checker_signal if checker was terminated by signal. mandos-monitor: Update to reflect DBus API change. (MandosClientWidget.checker_completed): Take "signal" instead of "condition" argument. Use it accordingly. Remove dead code (os.WCOREDUMP case).