On Fri, Feb 17, 2017 at 9:42 AM, Radek Duda <[email protected]> wrote: > Good morning folks, > Andrei thanks for this line of code I've forgotten to include it. So the > code reads: > > def run(vt_test, test_params, env): > cmd = "nc -l %s" % test_params['some_port'] > nc_process = process.SubProcess(cmd) > nc_process_pid = nc_process.start() > return > > Amador thanks for your advice, but it doesn't work for me. I need the > process to run in the background and not block test flow. That's why I used > start() method. I tried run() method as well, but the process does not go to > background and blocked test flow. I think the process should be killed > automatically after test finishes.
Oh, now I see what you need. Well, I'd recommend to finish the process in tearDown(). Not sure if we should make the runner to track the sub-processes created by the test... let me open a card to discuss that. > > Radek > > On Thu, Feb 16, 2017 at 5:09 PM, Amador Pahim <[email protected]> wrote: >> >> On Thu, Feb 16, 2017 at 5:02 PM, Andrei Stepanov <[email protected]> >> wrote: >> > I think >> > >> > nc_process_pid = nc_process.start() >> >> In that case, the missing part is the `wait()` (and the possible >> timeout handling) which are both present in `run()`. You can call it >> directly (with `process.run(cmd)`) instead of keeping the SubProcess >> object. Unless you have other reasons to have that object. >> >> > >> > On Thu, Feb 16, 2017 at 4:58 PM, Amador Pahim <[email protected]> wrote: >> >> >> >> On Thu, Feb 16, 2017 at 4:38 PM, Radek Duda <[email protected]> wrote: >> >> > Dear avocado users and developers, >> >> > I have made a testcase in which is executed nc process in run >> >> > function : >> >> > (simplified version): >> >> > >> >> > from avocado.utils import process >> >> > >> >> > def run(vt_test, test_params, env): >> >> > cmd = "nc -l %s" % test_params['some_port'] >> >> > nc_process = process.SubProcess(cmd) >> >> > return >> >> > >> >> > after testcase is executed, nc does not terminate and is still >> >> > present. >> >> > To >> >> > avoid this I have to kill the process e.g. by >> >> > process.safe_kill(nc_process_pid, signal.SIGKILL) >> >> >> >> Are you running the process with `nc_process.run()`? It's expected to >> >> wait for the process to finish. >> >> >> >> >> >> >> >> https://github.com/avocado-framework/avocado/blob/master/avocado/utils/process.py#L596-L643 >> >> >> >> >> >> > >> >> > It is pretty awkward to close the process manually particularly in >> >> > case >> >> > of >> >> > complex testcase code >> >> > Shouldn't be the subprocess killed automatically after test exits? >> >> > After all its called SubProcess >> >> > >> >> > >> >> > regards, >> >> > >> >> > Radek Duda >> >> >> > > >
