I need to be able to launch a program in the background, make it persist after the “parent” terminal closes and be able to access its stdin/stdout from another terminal. I don’t care about multiplexing.
I’ve been using tmux for this but I don’t like how it hijacks my mouse and that i’m not able to use my terminal’s search feature and have to use what tmux tui provides instead. In other words, programs launched directly in the terminal feel more comfortable to work with than when they are launched inside tmux.
I feel the ideal program should behave much simpler. Like e.g. on attach it should clear the screen, print the stdout buffer it accumulated and give me stdin prompt, that’s it.
Maybe I’m misunderstanding what your requirements are, but screen may be what you need https://www.man7.org/linux/man-pages/man1/screen.1.html
You might also be able to background the process:
https://linuxize.com/post/how-to-run-linux-commands-in-background/
You have a bunch of answers including one you chose, but you can always rebind the tmux key to something compatible with your terminals search and use [key] - d to disconnect from your tmux session then invoke it with tmux attach-session to get back into your session.
on attach it should clear the screen, print the stdout buffer it accumulated and give me stdin prompt, that’s it
The last part of the above, disconnecting from tmux and reattaching would do what you described. That may be useful if you need to work with tmux.
Have you tried screen? AFAIK it’s similar to tmux, but tmux has more bells and whistles, which it sounds like you want to avoid. I use it sometimes to start long running rsync sessions on a server and then periodically SSH in and check it. It does break scrolling though, but I don’t know if there’s some option to make it behave more like a normal terminal.
Yep. That is the simplest answer. From the link, directing stdout and stderr to a file:
nohup mycommand > mycommand.out 2>&1 &GNU Screen is an alternative.
You can also use tmux and just disable the mouse by adding this to
~/.tmux.confset -g mouse off
You could also create a user systemd service. It’s just a few line config you drop into the correct place in your home directory.
Looks like what I wanted, thanks! Took me a bit to figure out how to write an openrc service for its daemon but now it works
Might not be exactly what you want but I sometimes use mosh for this reason, I can start a task in the mosh terminal and then minimize or sleep, or even hibernate the machine and I will be able to come back to the same session later. (It also continues running if the connection is lost, and will reconnect when able)
Run the background stuff as a daemon, and then write an interface to take stdin/stdout and interact with that daemon.

