No zrovna teď řeším podobný task. Moje knihovna je založená na posílání různých notifikací při nastalé události. Umím podchytit události typu odemčení semaforu, otevření gate, uvolnění zámku, vykonání operace v jiném vláknu, dokonce i příchod dat na otevření socket. Zatoužil jsem po podobném rozhraní u ukončování procesů. Je tu několik zádrhelů.
Proces spustím normálně vfork + execve ovšem v libovolném vlákně, kde to potřebuji. V tom samém vlákně mohu udělat maximálně waitpid (na rozhraní vyvedeno jako join(), aby to bylo podobné jako u threadů). Thready umí mimojiné při ukončení obeslat listenery a na nich zavolat metodu wakeUp. U Procesu to bude horší, nicméně napadlo mě na to vyčlenit vlákno. Nechce se mi ale vyčlenit vlákno per process, ani se mi nechce vytvářet vlákno v případě, že to není potřeba (volající nebude registrovat listenery). Napadlo mě to udělat tak, jak to mám u soketů, že si soket zaregistruju na globální kolektor, který spustí vlákno a ve vlákně provádí select. Jenže u procesů to není tak jednoduché. Jednak mě docela děsí to, že nemohu selektivně čekat na děti. Mohu čekat jen na všechny, nebo na jedno. Další problém je, že na děti budu čekat v jiném vlákně, než vznikly. A třetí zádrhel je, co udělá linux, když čekatelů na děti bude náhodou víc, třeba když jeden bude čekat na všechny děti a druhý bude čekat jen na jedno selektivně.