larsxschneider@xxxxxxxxx writes: > From: Lars Schneider <larsxschneider@xxxxxxxxx> > > The flag 'clean_on_exit' kills child processes spawned by Git on exit. > A hard kill like this might not be desired in all cases. > > Add 'wait_on_exit' which closes the child's stdin on Git exit and waits > until the child process has terminated. > > The flag is used in a subsequent patch. > > Signed-off-by: Lars Schneider <larsxschneider@xxxxxxxxx> > --- > run-command.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++-------- > run-command.h | 3 +++ > 2 files changed, 50 insertions(+), 8 deletions(-) > > diff --git a/run-command.c b/run-command.c > index 3269362..96c54fe 100644 > --- a/run-command.c > +++ b/run-command.c > @@ -21,6 +21,9 @@ void child_process_clear(struct child_process *child) > > struct child_to_clean { > pid_t pid; > + char *name; > + int stdin; > + int wait; > struct child_to_clean *next; > }; > static struct child_to_clean *children_to_clean; > @@ -28,12 +31,33 @@ static int installed_child_cleanup_handler; > > static void cleanup_children(int sig, int in_signal) > { > + int status; > + struct child_to_clean *p = children_to_clean; > + > + /* Close the the child's stdin as indicator that Git will exit soon */ > + while (p) { > + if (p->wait) > + if (p->stdin > 0) > + close(p->stdin); > + p = p->next; > + } This part and the "stdin" field feels a bit too specific to the caller you are adding. Allowing the user of the API to specify what clean-up cation needs to be taken in the form of a callback function may not be that much more effort and would be more flexible and useful, I would imagine?