I'm trying to manage several processes that need to communicate through a virtual CAN interface (`vcan0`). I also want each process's stdin/stderr to be visible in my management session so I can monitor their outputs and send commands to them that aren't just routed through `vcan0`. I started looking into the `coproc` command, but I found out that you can only have one active coprocess at a time, which seems like a limitation. How can I work around this? What's a good way to handle multiple processes running simultaneously while keeping track of all their input and output without losing my mind?
1 Answer
You can definitely work around the limitation of `coproc` by assigning unique names to each coprocess. While the warning in the bash man page suggests you can only have one active coprocess, it’s more of a caution than a hard rule. Just ensure each coprocess has a distinct identifier. For instance, if you set them up correctly with unique names and manage their input/output, you should be fine. To keep the outputs directed to your management session, redirect their stderr to your terminal. It’ll look something like this:
coproc unique_coproc_name {
your_command_here
} 2>&1
This way, you can run multiple coprocesses without conflicts and still see each process's output without hassle!
That's great to know! I like the idea of having unique names for my processes. Now, if I want to send different commands to each one, I could just use the coprocess' file descriptor in my commands like this:
echo "command" > "${unique_coproc_name[0]}"
so I control them individually, right?