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 <[email protected]> > > 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 > >>>> [email protected] > >>>> http://lists.puremagic.com/mailman/listinfo/phobos > >>> _______________________________________________ > >>> phobos mailing list > >>> [email protected] > >>> http://lists.puremagic.com/mailman/listinfo/phobos > >> > >> -- Lars Tandle Kyllingstad > >> @: [email protected] > >> #: 40233221 > >> w: http://www.kyllingen.net > >> _______________________________________________ > >> phobos mailing list > >> [email protected] > >> http://lists.puremagic.com/mailman/listinfo/phobos > > > > _______________________________________________ > > phobos mailing list > > [email protected] > > http://lists.puremagic.com/mailman/listinfo/phobos > > > -- Lars Tandle Kyllingstad > @: [email protected] > #: 40233221 > w: http://www.kyllingen.net > _______________________________________________ > phobos mailing list > [email protected] > http://lists.puremagic.com/mailman/listinfo/phobos _______________________________________________ phobos mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/phobos
