[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated
From: |
Christopher Faylor |
Subject: |
Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated |
Date: |
Fri, 16 Aug 2013 11:19:58 -0400 |
User-agent: |
Mutt/1.5.20 (2009-06-14) |
On Wed, Aug 07, 2013 at 12:52:48PM +0400, Pavel Fedin wrote:
>> I tried to explain that in my first response: 'fork' has a certain
>> semantics and implements requirements that 'spawn' does not.
>
>Stop stop stop... Just to avoid misunderstanding here... fork() alone
>cannot be replaced with spawn(), yes. But as fas as i understand, make
>does not use fork() alone. It uses fork() + exec() pair in order to
>start external programs. As an end result, it is expected to run an
>external executable with some defined environment (make sets
>environment in the child then uses execvp() where external binary
>inherits it ). spawnvpe() does absolutely the same, but in one shot.
>It runs an external executable with predefined environment. Similar to
>fork(), spawnvpe() returns child's PID, which allows to wait for its
>termination, send signals, etc. And of course the started binary runs
>completely asynchronously, the same as with fork() + exec().
Eli certainly understand all of this.
> Windows actually does not allow to fork() cleanly by design (there's a full
>explanation in http://www.cygwin.com/cygwin-ug-net/highlights.html ).
>spawn() is much faster because the child is created from scratch with a new
>executable, it does not have to be a clone of the parent, so it perfectly
>wraps to legitimate CreateProcess() call.
> $(shell ) function also works fine, consequently we really perfectly handle
>stdin/stdout (without this i don't see how command output would be
>captured).
> So...
And he understand this too. The point, which you seem to be missing, is
that since Cygwin strives to provide a UNIX-like environment, we spend a
lot of time making sure that fork works like it does on UNIX. You won't
find spawn() (posix_spawn exists but it is a different beast) on UNIX.
So there is no guarantees that using spawn() in make will exactly mimic
UNIX functionality.
Also, when I'm making changes to the exec() code I don't spend a lot of
time worrying about spawn() so it is possible that it will be broken
from time to time and, in fact, I think you actually noticed some
breakage in the cygwin list.
make already has a mechanism for passing command line switches down. I
think you'd have to work to defeat it. So, for correctness, I would
also would rather have an option which requires the user to specify this
on the command line.
cgf
- [PATCH] Use spawn() in GNU Make on Cygwin, updated, Pavel Fedin, 2013/08/05
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Eli Zaretskii, 2013/08/05
- RE: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Pavel Fedin, 2013/08/06
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Eli Zaretskii, 2013/08/06
- RE: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Pavel Fedin, 2013/08/07
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Denis Excoffier, 2013/08/11
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Pavel Fedin, 2013/08/11
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated,
Christopher Faylor <=
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Pavel Fedin, 2013/08/16
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Paul Smith, 2013/08/16
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Christopher Faylor, 2013/08/16
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Paul Smith, 2013/08/16
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Pavel Fedin, 2013/08/16
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Eli Zaretskii, 2013/08/16
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Paul Smith, 2013/08/16
- RE: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Pavel Fedin, 2013/08/22
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Eli Zaretskii, 2013/08/22
- Re: [PATCH] Use spawn() in GNU Make on Cygwin, updated, Christopher Faylor, 2013/08/30