[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