Mail Archives: cygwin/2006/11/15/11:19:33
Eric Blake <ebb9 <at> byu.net> writes:
> > else
> > sprintf(cmd, "sh -c '%s' %d>&-", program, pdes[1])
> > }
> > pid = spawnl(_P_NOWAIT, _PATH_BSHELL, "sh", "-c", cmd, NULL);
>
> Why are you going through two levels of sh? That seems like a waste to
> me; the whole idea of using spawn is to avoid a fork(), but when you
> invoke "sh" "-c" "sh -c 'cmd'", you are right back to a fork. True, the
> new invocation of sh uses less memory than the 1 GB process that invoked
> popen, so less thrashing will occur, but your whole approach seems
> fundamentally flawed if you are trying to use spawn to avoid a fork.
You know, maybe a better approach to this would be to first implement
posix_spawn() in cygwin, since that API seems like it would be possible to do
the necessary fd manipulation in a spawned child process without the penalty of
a full fork/exec. Then you could teach popen how to use posix_spawn when it is
available, which is probably a patch more likely to be accepted in newlib,
rather than your current idea of having to go through an intermediary sh
invocation. But I do not have a copyright on file for cygwin contributions, so
I am currently unable to work on contributing posix_spawn; you are at the mercy
of someone willing and able to write such a patch.
--
Eric Blake
--
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/
- Raw text -