On 4/15/2012 3:50 AM, Stefan Sperling wrote:
> On Thu, Apr 12, 2012 at 10:37:13PM -0500, William A. Rowe Jr. wrote:
>> Has anyone else ever encountered an opportunity to detach a process,
>> which you would still enjoy stdio channels to communicate?
> 
> Yes, this is done in Subversion to run hook scripts.
> See svn_io_start_cmd3() in:
> https://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_subr/io.c
> 
>> First I actually have bumped into this, but we didn't seem to leave
>> much in the way of an apr_proc_detach that avoids shuttering stdio
>> handles that were *just configured* through the procattr.  Seems
>> sort of strange to me, because the docs don't make this clear.
> 
> Not sure if this is related but the above mentioned function
> contains this comment:
> 
>      ### Unfortunately each of these apr functions creates a pipe and then
>      overwrites the pipe file descriptor with the descriptor we pass
>      in. The pipes can then never be closed. This is an APR bug. */

I'll give this some further thought and offer up a fix.  It seems like
we should have honored the user's choice of apr_procattr_file_pipe magic.
For simplicity we can make sure in APR 2 that we have three default tags
for each stream, a choice between parent's handle, a /dev/null handle and
a truly closed/unused fd, alongside the usual pipe and file options.

I don't know what the group believes we can change in APR 1.5 since there
are all sorts of behavioral implications.  But if users were using the
apr_procattr options already, no harm, no foul?  Have apr_procattr with
absolutely no extra file/pipe calls simply mock up the /dev/null setup?

Another question came up.  What about reducing signals upon apr_proc_create?
Would it be helpful to be able to pass 'nohup' style choices to that new
process?

Reply via email to