Is there a way to reattach to a specific terminal a process that was started from terminal with &? For instance, I started Kate by:
and now I want to reattach the process to a given terminal.
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.Sign up to join this community
There are two issues here:
1) Death by HUP and avoiding that:
If you start a program in a shell and then end that shell then all child processes will be killed. This includes programs running in to background. (Those which you start with an & at the end of the command, like the
kate & in your example, but also processes which you suspended with controlz and then
Both will die once you close the shell.*1
You can work around this by
disowning the backgrounded program. It will then keep running, but you can no longer get it back to the foreground of a shell.
You can use nohup (e.g.
nohup kate &) to keep the output from the program in a file. But full reattachment to a shell is also no longer possible.
2) Terminal emulators.
You can also start a program which emulates a terminal on its own and which is specially build so you can reconnect to it.
tmux are two examples of this.
Example of screen usage:
screen(starts screen. By default this starts a new shell).
Walk to another computer, or come back hours later. (or both :))
- log in or ssh to host.
screen -r (Reattach screen. you are now back at a shell where you are running kate.
Useful commands for screen:
Detach a screen from outside the screen program.
Use ControlAD to detach from inside screen.
screen -r Reconnect to the screen (e.g. from a different location)
If there is an attached screen, then first detach it. Then attach it locally.
Useful of you forgot to detach it at the office and log in from home ;)
Attach to a running screen without closing the other session. Useful for shared debugging, help session etc. etc.
*1: Edit: When I answered this I assumed that all shells would always sends a sigHUP to all of its children. However this is an option and depending on the shells it may be configurable. In some cases it even is no longer the default.
Example1: In bash you can configure this option via the buildin command shopt. (
shopt -s huponexit).
Example2: With zsh you want
fg brings something from the background to the foreground in the current terminal.