You said you create forks, I assume you have a central script that these forks are created from. Create a socket pair for each fork and pass data back and forth over them. You can use something like IO::Select to see what has data waiting. Another option would be to maintain a file or directory with proper locking, or use regular sockets. There are many ways to go about it. Even signals could probably work for minor notification stuff.