[phobos] Suggestions for std.process

Steve Schveighoffer schveiguy at yahoo.com
Mon Mar 8 10:53:52 PST 2010


I would not do this.  A signal handler has no synchronization with the rest of the code, so you are not guaranteed to be in a sane state.  In addition, you can't catch a signal for just one child process, you have to catch them all.

Plus the user could have registered a signal handler for that signal, making the library or user code not work right.  I think signals are just too blunt an instrument to make this work.

-Steve



----- Original Message ----
> From: Lars Tandle Kyllingstad <lars at kyllingen.net>
> 
> I didn't even think of that, but you're right, of course.  The parent gets a 
> SIGCHLD when the child terminates.  I wonder if it's possible to restrict the 
> callback so that it's safe to call it from a signal handler?  It would have to 
> be nothrow, that's for sure, but that's probably not enough.  It is all too easy 
> to make thread-unsafe code with signal handlers.  Is it possible to mark 
> functions or delegates with 'shared', so they only operate on shared data?
> 
> -Lars
> 
> 
> Sean Kelly wrote:
> > In *nix you can set a signal handler to be notified when a child process 
> completes.  But the restrictions on what can be done inside a signal handler are 
> such that maybe executing a callback from inside one isn't a good idea anyway.
> > 
> > On Mar 8, 2010, at 12:22 AM, Lars Tandle Kyllingstad wrote:
> > 
> >> I don't know any way of doing this besides spawning a separate thread that a) 
> starts the process, b) waits for it to complete, and c) calls the callback 
> function/delegate.
> >> 
> >> Is this what you had in mind?
> >> 
> >> -Lars
> >> 
> >> 
> >> Sean Kelly wrote:
> >>> I'm not sure if this is supported in Windows, but if so, it might be nice if 
> I could set a callback that would be executed when the process completes.
> >>> On Mar 3, 2010, at 9:44 AM, Lars Tandle Kyllingstad wrote:
> >>>> Hi,
> >>>> 
> >>>> Recently, I found myself in need of the functionality that is (or should 
> have been) in std.process, but unfortunately I found it lacking in many 
> respects.  Assuming that improving it currently isn't at the top of the to-do 
> list for Phobos, I decided not to wait, and rather to write my own version.  If 
> you want you can check it out here:
> >>>> 
> >>>> Code:   http://github.com/kyllingstad/ltk/blob/master/ltk/process.d
> >>>> Docs:   http://kyllingen.net/code/ltk/doc/process.html
> >>>> 
> >>>> I don't know if any of it is usable for Phobos, but if it is, I'd be happy 
> to contribute.
> >>>> 
> >>>> I've tried to write it in the style of std.concurrency, with a function 
> spawnProcess() that returns a Pid struct.  Currently it is for POSIX only, since 
> I have no experience at all with the Windows API.
> >>>> 
> >>>> -Lars
> >>>> _______________________________________________
> >>>> phobos mailing list
> >>>> phobos at puremagic.com
> >>>> http://lists.puremagic.com/mailman/listinfo/phobos
> >>> _______________________________________________
> >>> phobos mailing list
> >>> phobos at puremagic.com
> >>> http://lists.puremagic.com/mailman/listinfo/phobos
> >> 
> >> -- Lars Tandle Kyllingstad
> >> @: lars at kyllingen.net
> >> #: 40233221
> >> w: http://www.kyllingen.net
> >> _______________________________________________
> >> phobos mailing list
> >> phobos at puremagic.com
> >> http://lists.puremagic.com/mailman/listinfo/phobos
> > 
> > _______________________________________________
> > phobos mailing list
> > phobos at puremagic.com
> > http://lists.puremagic.com/mailman/listinfo/phobos
> 
> 
> -- Lars Tandle Kyllingstad
> @: lars at kyllingen.net
> #: 40233221
> w: http://www.kyllingen.net
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos



      


More information about the phobos mailing list