Right.  Upon reflection the best approach is probably just to launch a thread 
to block on wait().  It won't consume any CPU cycles waiting anyway.

On Mar 8, 2010, at 1:08 PM, Andrei Alexandrescu wrote:

> Like Sean, I don't think going with SIGCHILD is a good idea. It's not only 
> about thread safety, but mostly about reentrancy of system functions.
> 
> Andrei
> 
> Lars Tandle Kyllingstad wrote:
>> 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
> _______________________________________________
> phobos mailing list
> [email protected]
> http://lists.puremagic.com/mailman/listinfo/phobos

_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to