[Avocado-devel] Subprocess termination

Amador Pahim apahim at redhat.com
Thu Feb 16 16:09:24 UTC 2017


On Thu, Feb 16, 2017 at 5:02 PM, Andrei Stepanov <astepano at redhat.com> 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 <apahim at redhat.com> wrote:
>>
>> On Thu, Feb 16, 2017 at 4:38 PM, Radek Duda <rduda at redhat.com> 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
>>
>




More information about the Avocado-devel mailing list