The new std.process is ready for review
H. S. Teoh
hsteoh at quickfur.ath.cx
Sat Feb 23 16:09:43 PST 2013
On Sat, Feb 23, 2013 at 06:55:19PM -0500, Steven Schveighoffer wrote:
> On Sat, 23 Feb 2013 17:46:04 -0500, H. S. Teoh
> <hsteoh at quickfur.ath.cx> wrote:
>
> >On Sat, Feb 23, 2013 at 03:15:26PM -0500, Steven Schveighoffer wrote:
[...]
> All we look at is WIFEXITED and WIFSIGNALED. I think the others are
> Linux specific. I don't think std.process2 should expose all the
> vagaries of the OS it's on, this is a cross-platform library. Doing
> signals was easy because we embedded it in the int.
Fair enough, I think WIFEXITED and WIFSIGNALED probably covers 99.5% of
the common use cases anyway, so it's probably not worth sweating over.
BTW, is "std.process2" just the temporary name, or are we seriously
going to put in a "std.process2" into Phobos? I'm hoping the former, as
the latter is unforgivably ugly.
> There is always pid.osHandle, which you can use to do whatever you want.
True.
> >>> - How do I wait for *any* child process to terminate, not just a
> >>> specific Pid?
> >>
> >>I don't think we have a method to do that. It would be complex,
> >>especially if posix wait() returned a pid that we are not handling!
[...]
> >Hmm. The more I think about it, the more it makes sense to just have
> >std.process manage all child process related stuff. It's too painful
> >to deal with multiple child processes otherwise. Maybe provide an
> >opt-out in case you need to link in some C/C++ libraries that need
> >their own child process handling, but the default, IMO, should be to
> >manage everything through std.process.
>
> I can imagine that a ProcessManager singleton class could be written
> that collects all exited children, and does anything you need. But I
> don't know if it's a necessary component for std.process to go out the
> door. We currently have no such feature, so I would push for
> std.process to be reviewed and accepted without that, and then
> consider that an enhancement request.
[...]
Fair enough, we do want the new std.process to get in ASAP.
> Now, one thing we could probably do quickly and easily is add a wait
> function that returns immediately if the process is not done. I'm
> pretty sure that is supported on all platforms.
[...]
Excellent! I think if we had this, it would address most of my concerns
above. A non-blocking wait would allow user code to do things like
monitor the progress of child processes, etc., and basically implement
whatever OS-specific stuff it may need to, without adding too much
complication into std.process. I vote for putting this in, and just
leave the handling of multiple child processes to user code.
T
--
What are you when you run out of Monet? Baroque.
More information about the Digitalmars-d
mailing list