*** Settings *** Documentation Robot keyword library (Resource) for killing possibly left-over Python utilities. ... ... Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. ... ... This program and the accompanying materials are made available under the ... terms of the Eclipse Public License v1.0 which accompanies this distribution, ... and is available at http://www.eclipse.org/legal/epl-v10.html ... ... ... This library assumes that a SSH connections exists (and is switched to) ... to a Linux machine (usualy MININET) where the Python process should be killed. ... TODO: The Utils.robot library has a "Run Command On Remote System" if we didn't want to make the assumption that an SSH connection was already open. ... alternative TODO: Explain that it is not worth to perform separate SSH logins. ... ... The argument ${filter} should hold what you would type to grep command in bash: ... enclosed in single quotes, dots escaped by backslash and so on. ... Note that single quote inside cannot be escaped, but may be typed as this: '"'"' *** Keywords *** Search_And_Kill_Remote_Python [Arguments] ${filter} [Documentation] The main keyword. Search for processes, Log the list of them, kill them. ${processes}= Search_For_Remote_Python_Processes ${filter} BuiltIn.Log ${processes} Kill_Remote_Processes ${processes} Search_For_Remote_Python_Processes [Arguments] ${filter} [Documentation] Only searches for the list of processes, in case something else than kill has to be done with them. ${processes}= SSHLibrary.Execute_Command ps -elf | egrep python | egrep ${filter} | egrep -v grep # TODO: Is "python" worth such a special treatment to have it mentioned in keyword name? [Return] ${processes} Kill_Remote_Processes [Arguments] ${pself_lines} ${signal}=9 [Documentation] Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used. ${arg_length}= BuiltIn.Get_Length ${pself_lines} Return_From_Keyword_If ${arg_length} == 0 # nothing to kill here ${commands}= SSHLibrary.Execute_Command echo '${pself_lines}' | awk '{print "kill -${signal}",$4}' BuiltIn.Log ${commands} ${stdout} ${stderr}= SSHLibrary.Execute_Command echo 'set -exu; ${commands}' | sudo sh return_stderr=True # TODO: Is -exu needed? Should we Log ${std*}?