qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 5/8] guest agent: add guest-exec and guest-exec-


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH 5/8] guest agent: add guest-exec and guest-exec-status interfaces
Date: Tue, 03 Feb 2015 14:45:26 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0

On 12/31/2014 06:06 AM, Denis V. Lunev wrote:
> From: Simon Zolin <address@hidden>
> 
> Interfaces to execute/manage processes in the guest. Child process'
> stdin/stdout/stderr can be associated with handles for communication
> via read/write interfaces.
> 
> Signed-off-by: Simon Zolin <address@hidden>
> Acked-by: Roman Kagan <address@hidden>
> Signed-off-by: Denis V. Lunev <address@hidden>
> CC: Michael Roth <address@hidden>
> ---

> +++ b/qga/qapi-schema.json
> @@ -759,3 +759,50 @@
>  ##
>  { 'command': 'guest-get-fsinfo',
>    'returns': ['GuestFilesystemInfo'] }
> +
> +##
> +# @guest-exec-status
> +#
> +# Check status of process associated with PID retrieved via guest-exec.
> +# Reap the process and associated metadata if it has exited.
> +#
> +# @pid: pid returned from guest-exec
> +#
> +# Returns: GuestExecStatus on success.  If a child process exited, "exit" is 
> set
> +#          to the exit code.  If a child process was killed by a signal,
> +#          "signal" is set to the signal number.  If a child process is still
> +#          running, both "exit" and "signal" are set to -1.  On Windows,
> +#          "signal" is always set to -1.

That last sentence feels a bit too specific, and might even be wrong (it
IS possible to tell in Windows if something died due to Ctrl-C, which is
effectively SIGINT); so it might be better worded as 'If a guest cannot
reliably detect exit signals, "signal" will be -1'.

> +#
> +# Since: 2.3
> +##
> +{ 'type': 'GuestExecStatus',
> +  'data': { 'exit': 'int', 'signal': 'int',
> +            'handle_stdin': 'int', 'handle_stdout': 'int',
> +            'handle_stderr': 'int' } }

s/_/-/ throughout (that is, prefer dash, not underscore, for
handle-stdin and friends)

> +
> +{ 'command': 'guest-exec-status',
> +  'data':    { 'pid': 'int' },
> +  'returns': 'GuestExecStatus' }

Is there any way to query which pids are currently being tracked?
Suppose that the host's connection to qga is interrupted; on reconnect,
how can the host learn which pids are in use, to know how to grab status
of those pids?

> +
> +##
> +# @guest-exec:
> +#
> +# Execute a command in the guest
> +#
> +# @path: path or executable name to execute
> +# @params: #optional parameter list to pass to executable
> +# @env: #optional environment variables to pass to executable
> +# @handle_stdin: #optional handle to associate with process' stdin.
> +# @handle_stdout: #optional handle to associate with process' stdout
> +# @handle_stderr: #optional handle to associate with process' stderr

Inconsistent trailing '.'.  If any handle is omitted, what is used in
its place, effectively /dev/null?

> +#
> +# Returns: PID on success.
> +#
> +# Since: 2.3
> +##
> +{ 'command': 'guest-exec',
> +  'data':    { 'path': 'str', '*params': ['str'], '*env': ['str'],

I guess 'env' matches the usual exec*() interface, where the user is
responsible for passing 'name=value' pairs and behavior is not
necessarily defined if any of those strings aren't a name=value?

> +               '*handle_stdin': 'int', '*handle_stdout': 'int',
> +               '*handle_stderr': 'int' },

again, s/_/-/

> +  'returns': 'int' }
> 


-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]