def close(self, sig=signal.SIGKILL): """ Kill the child process if it's alive and remove temporary files. @param sig: The signal to send the process when attempting to kill it. """ # Kill it if it's alive if self.is_alive(): virt_utils.kill_process_tree(self.get_pid(), sig) # Wait for the server to exit _wait(self.lock_server_running_filename) # Call all cleanup routines for hook in self.close_hooks: hook(self) # Close reader file descriptors for fd in self.reader_fds.values(): try: os.close(fd) except Exception: pass self.reader_fds = {} # Remove all used files for filename in (_get_filenames("/tmp/kvm_spawn", self.id) + self.reader_filenames.values()): try: os.unlink(filename) except OSError: pass
def close(self, sig=signal.SIGKILL): """ Kill the child process if it's alive and remove temporary files. @param sig: The signal to send the process when attempting to kill it. """ # Kill it if it's alive if self.is_alive(): virt_utils.kill_process_tree(self.get_pid(), sig) # Wait for the server to exit _wait(self.lock_server_running_filename) # Call all cleanup routines for hook in self.close_hooks: hook(self) # Close reader file descriptors for fd in self.reader_fds.values(): try: os.close(fd) except: pass self.reader_fds = {} # Remove all used files for filename in _get_filenames("/tmp/kvm_spawn", self.id) + self.reader_filenames.values(): try: os.unlink(filename) except OSError: pass
def raw_ping(command, timeout, session, output_func): """ Low-level ping command execution. @param command: Ping command. @param timeout: Timeout of the ping command. @param session: Local executon hint or session to execute the ping command. """ if session is None: process = aexpect.run_bg(command, output_func=output_func, timeout=timeout) # Send SIGINT signal to notify the timeout of running ping process, # Because ping have the ability to catch the SIGINT signal so we can # always get the packet loss ratio even if timeout. if process.is_alive(): virt_utils.kill_process_tree(process.get_pid(), signal.SIGINT) status = process.get_status() output = process.get_output() process.close() return status, output else: output = "" try: output = session.cmd_output(command, timeout=timeout, print_func=output_func) except aexpect.ShellTimeoutError: # Send ctrl+c (SIGINT) through ssh session session.send("\003") try: output2 = session.read_up_to_prompt(print_func=output_func) output += output2 except aexpect.ExpectTimeoutError, e: output += e.output # We also need to use this session to query the return value session.send("\003") session.sendline(session.status_test_command) try: o2 = session.read_up_to_prompt() except aexpect.ExpectError: status = -1 else: try: status = int(re.findall("\d+", o2)[0]) except Exception: status = -1 return status, output