Bash doesn't launch the applications directly.
Lenik
len1@bodz.net
Fri Jan 16 04:22:00 GMT 2009
"Eric Blake" <ebb9@byu.net> åå
¥æ¶æ¯ news:496F34BB.6080200@byu.net...
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> According to Lenik on 1/14/2009 5:59 PM:
>> Hi, all
>>
>> I noticed that when bash launches a program, for example win32
>> notepad.exe or cygwin sleep, it in fact launches another bash which
>> launches the final program,
>>
>> Any idea?
>
> Yes. It's called forking (a concept that Windows does not have natively,
> but which cygwin does a LOT of work to emulate). The way Unix apps
> (including bash) start another program is to first fork themselves, then
> in that fork, exec the target program. The fork accounts for the second
> bash process.
>
> Depending on the nature of the called process, you might also see those
> additional processes stick around. If the child is a cygwin process (like
> sleep), exec() is decently emulated, where the forked bash goes away and
> you are left with only one running sleep process. But if it is a windows
How fast does the emulation implemented?
> process (like notepad), cygwin has to insert a shim process in between to
> handle signal handling in order to abort notepad if you type ctrl-c in
> bash, as well as collect the correct exit status.
Is there any option to disable the shim process?
I have tried to launch notepad in background:
# calc &
In such situation, we won't ever press ctrl-c or ctrl-z, (maybe until fg
%1), but there still got 2 bash processes. If I just want to send the launch
signal to win32, and don't care what if user press ctrl-c in the bash.
I tried `cygstart `which notepad`', this did launch another bash, too (while
it launches cygstart.exe and which.exe additionally). Though the cygstart
and shim are then immediately terminated, but it cost the launching time.
>
> Ultimately, bash could be made faster by using posix_spawn() instead of
> fork(), for much of what it does. However, that would require 1) an
> upstream patch to bash to use posix_spawn(), including a fallback
> implementation of posix_spawn on platforms that don't yet implement it
> (such an implementation is possible, since gnulib already provides one,
> but the upstream maintainer is hard to convince, and even if the patch
> existed, it has already missed the bash 4.0 cutoff), and 2) an
> implementation of posix_spawn() in cygwin that directly spawns processes
> using native Windows concepts (the bash fallback implementation of
> posix_spawn() would still end up using fork() under the hood, giving no
> speedups until we have a native version). http://cygwin.com/acronyms/#PTC
>
Is it possible to make cygstart as a bash built-in? And thus will get
another benefit that after cygstart.exe terminated, the parent-children
relationship between the bash and notepad can be maintained.
Lenik
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
More information about the Cygwin
mailing list