On Fri, 13 Feb 2004 23:31:56 -0500  Rocco Caputo wrote:
 +------------------
 | Proposal: Registered PIDs.
 | 
 | Currently SIGCHLD is broadcast to every session that registers a CHLD
 | signal handler.  Quite often, this means every session with child
 | processes receives signals for every other one.  They all must track
 | their children and filter the incoming signals against theirs.
 | 
 | A conversation in IRC reminded me about this issue.  I suggested the
 | customary pattern for dealing with broadcast SIGCHLD.
 | 
 |   One of the parameters is the child PID.  You can return unless
 |   exists $heap->{mine}{$pid}
 | 
 | Philip Gwyn and I had just covered the heavyhanded _signal event,
 | which is in the throes of deprecation.  It further occurred to me that
 | dispatching SIGCHLD to every session with a handler is often useless,
 | since most of them don't care one whit about any other session's
 | process IDs.
 | 
 |   Maybe an optimization would be a Kernel registry mapping child PIDs
 |   to sessions.  After you fork, you can call $kernel->forked($pid) to
 |   focus that PIDs SIGCHLD on the current session.  POE::Wheel::Run
 |   could do it internally.
 | 
 |   Unregistered PIDs would still be broadcast around.  And to be fair,
 |   I guess multiple sessions could register interest in a child PID.
 |   For whatever that's worth.
 | 
 | This would require a new POE::Kernel method.  I wish it could be
 | incorporated into something like sig(CHLD => "event"), but re-
 | registering the SIGCHLD handler shouldn't be necessary for every new
 | process.
 +------------------

Is SIGCHLD the only case where additonal context can be used by the
Kernel to decide how to dispatch multicast events to sessions?  Is
there a way to implement this feature so that other signals could
take advantage of pushing selection behavior into kernel?

--

Reply via email to