def launch(self):
with self.process_lock:<EOL><INDENT>current_commands = dict(list(map((lambda process: (process.name, process.command)),<EOL>list(self.processes_to_monitor.values()))))<EOL>updated_commands = self.get_commands_to_run()<EOL>commands_to_kill, commands_to_keep, commands_to_start =self.get_command_changes(current_commands, updated_commands)<EOL>Log.info("<STR_LIT>" % sorted(current_commands.keys()))<EOL>Log.info("<STR_LIT>" % sorted(updated_commands.keys()))<EOL>Log.info("<STR_LIT>" % sorted(commands_to_kill.keys()))<EOL>Log.info("<STR_LIT>" % sorted(commands_to_keep.keys()))<EOL>Log.info("<STR_LIT>" % sorted(commands_to_start.keys()))<EOL>self._kill_processes(commands_to_kill)<EOL>self._start_processes(commands_to_start)<EOL>Log.info("<STR_LIT>" %<EOL>(len(commands_to_kill), len(commands_to_keep),<EOL>len(commands_to_start), len(self.processes_to_monitor)))<EOL><DEDENT>
Determines the commands to be run and compares them with the existing running commands.
        Then starts new ones required and kills old ones no longer required.