[libvirt] [PATCH 0/3 RFC] Demonstrating a new API for spawning processes

Eric Blake eblake at redhat.com
Wed May 26 14:59:20 UTC 2010


On 05/26/2010 08:44 AM, Daniel P. Berrange wrote:
>> The $PATH of the parent process, or the $PATH of the environment passed
>> to the child process?  That can make a subtle difference, if one uses
>> virCommandAddEnvString(cmd, "PATH=...").
> 
> I was going to say 'the same rules as execvp' but I now realize there
> is no execvp variant that also accepts a  char * argv + char *env[]. 
> Only a va_args variant. And execve doesn't do path resolution.

Several systems now offer execvpe(); it wouldn't be that hard to add a
gnulib wrapper function that guarantees it everywhere.

> 
> It doesn't hugely matter which semantics we have - which do you
> suggest.

I haven't exhaustively tested, but env(1) (which is as close as you can
get to a standardized execvpe(2)) honors the PATH of the parent, not of
the child's new environment.  If I were to implement execvpe() in
gnulib, I would document it that way, as well.

>> If the same env-var is added more than once, are we guaranteeing that
>> the last one wins?  In other words, it should be easy to call
>> virCommandAddEnvPassCommon(cmd) && virCommandAddEnvString(cmd,
>> "PATH=...") to override just PATH.
> 
> What does execve() do if env[] has the same name twice ? We'll just
> be delegating to that 

POSIX leaves it unspecified which entry is found if env[] lists the same
value more than once.  Some implementations favor the first, while
others favor the last.  Semantically, I'd rather guarantee that we favor
the last (it makes the virCommand* API easier to use), but to do that,
it means we have to manually search all prior env entries for duplicates.

> 
>> Should there be an easy way to specify that a particular child process
>> should keep the localization settings of the parent, rather than the
>> LC_ALL=C of virCommandAddEnvPassCommon?
> 
> AFAIK, none of our current usage requires it, but if the conversion
> of existing code requires it, we can adapt.

No rush, then - wait until we have a use case (if ever).

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20100526/f726918f/attachment-0001.sig>


More information about the libvir-list mailing list