Boost logo

Boost :

From: Gregory Colvin (gregory.colvin_at_[hidden])
Date: 2004-06-22 17:46:24


On Jun 22, 2004, at 11:34 AM, Angus Leeming wrote:
> I am in the process of writing a little library to control the
> interaction
> of a parent program with any child processes that it spawns. Would
> there
> be any interest in such a library here?
>
> Assuming that there would, please excuse me diving in at the deep end.
> I'm
> currently mulling over how best to ensure that system resources are
> cleaned up automatically when the child exits and would value some
> advice.
>
> Under unix, I've defined a handler for SIGCHLD signals. The handler
> does
> two things only:
> * reaps the zombie
> * stores the return status in a
> std::map<pid_t, int> completed_children;
> variable. Each time a new child is spawned, the pid of the child
> process
> is registered in the map, so the handler needs do nothing other than
> find
> the entry.
>
> namespace {
>
> std::map<pid_t, int> completed_children;
>
> int status;
> sig_atomic_t pid;
>
> }
>
> extern "C"
> void child_handler(int)
> {
> pid = wait(&status);
> std::map<pid_t, int>::iterator it =
> completed_children.find(pid);
> if (it != completed_children.end())
> it->second = status;
> }
>
> I'm pretty sure that the above is safe code.

It's unsafe because it's not reentrant.

But why do you need to reap the zombie? I've implemented
the java process control natives with no need for reaping.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk