Unfortunately, or, maybe even fortunately, I think I might be onto the cause of this, since I finally tested on an Ubuntu running in Libvirtd, and I get the same behavior.
The cause, I think, is the fact that when I check the process tree with pstree, on ubuntu, I can see that my application is started via sh, whereas on suse, its running directly under robot.
Since the signal is sent from robot to the shell, it will not propagate the signal to its child process.
The question now is, why does the same robot version, behavior differently on these OS:s.
with shell=True, the main process definitely should be sh. Weird if Suse based wsl is not showing that. Can you verify if your suse has /bin/sh and if not, maybe symlink bash into it ? Another thing that would be interesting is that are you running robot inside WSL and if not, whats the value of ${RunCommand}
When i was working on seleniumtestability, i had to write this because i wasn’t able to kill all childprocesses (it was probably flask) on Windows and this caused hangs in test execution. Essentially that Die Die Die keyword will take a pid and forcefully kill a process and all of its child processes. Worth probably mentioning is that Jenkins has a hack that relates to similar issues. Jenkins “slave” sets a unique environment value - and when pipeline finishes, all the processes with env “X” is set to that unique value are killed.
Just in case someone else runs into this issue, and the reason you’re using shell=true, is because you’ve got a gazillion parameters inside various ${strings} (which makes in messy and complicated to supply them separately to Start Process)… I started using:
${ccmParamsAsList}= Split Command Line ${startParams}
${ccm} = Start Process ${RunCommand} @{ccmParamsAsList}
... stdout=${LOG_PATH}/ccm_${TEST_NAME}.stdOut stderr=${LOG_PATH}/ccm_${TEST_NAME}.stdErr