There is a neat program called ser2net that would allow you to maintain these things as two separate programs. Basically, it would expose the serial port via a tcp socket that program #1 can connect to, and is able to talk bidirectionally just like any socket client.
The second program...the one that just needs read access to what's coming out of the port could do one of two things:
- Continuously watch the output of a "tracefile" that ser2net can provide
- Or, it can also connect (via tcp) to a separate control port, provided by ser2net, send the string "monitor term <port>", and then it will get a streamed copy of everything coming from the serial port.
It does support binding it's listen ports to only localhost, so it doesn't need to expose all of this to outside hosts.
The man page is here
. Prebuilt packages are out there for debian, redhat, etc.