Screen
screen is a terminal multiplexer.
Once logged in on a server, use screen bash and you will have another "bash" in a virtual window. From there you can add other windows with different programs and move from a window to another. Ultimately, you can send "screen" in the background & logout - "screen" will detach and run in the background.
Example:
hashar@bihash:$ ssh aserver
$ screen bash
A new "bash" is invoked, my "xterm" title show:
[screen 0: bash] hashar@zwinger:~
This means I am in the "screen" window #0 and running "bash".
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
2 0 65508 51500 106756 430740 2 1 3 4 6 6 7 14 65 14
0 0 65508 51372 106764 430732 0 0 12 24 0 0 2 15 82 2
0 0 65508 51404 106768 430728 0 0 8 0 0 0 1 10 88 1
and so on ...
Multiple windows inside one "screen"
I am monitoring the server. Now let us create another window to edit a file. This is done by using CTRL + A then C (for create).
A new "bash" is invoked, my "xterm" title show:
[screen 1: bash] hashar@zwinger:~
I can do whatever I want there. To move back to the window with "vmstat" use CTRL + A then P (for previous), to switch again CTRL + A then N (for next).
Splitting windows
You can also split a "screen" to see more than one window at once. Use CTRL + A then S (yes, that is a capital "S", so SHIFT + s, for Split), then use CTRL + A then <Tab> to switch between them. Now you can create a new window, using CTRL + A then C as described above and keep switching between them using Tab.
Detaching and Re-attaching
Finally it is dinner time or you need to reboot your computer, or whatever. You can send "screen" in the background and logout, that will keep all your program running. This is done with CTRL + A then D (for detach).
$ screen bash
[detached]
$ ps fx
13178 ? S 0:00 SCREEN bash
13179 pts/1235 S 0:00 \_ bash
13249 pts/1236 S 0:00 \_ /bin/bash
"Screen" is in the background. Now you can logout. Once logged back, you want to resume your backgrounded "screen":
$ screen -r
You are back to the "vmstat" stuff which is still spamming values :)
Finally log out of all windows, when there is none left, "screen" exit:
[screen is terminating]
$
Attaching a shared "screen"
If you want to share a "screen" with somebody else who is logged in as the same user, or you have forgotten to detach from somewhere else, and screen -r does not appear to work use:
$ screen -x
(Attach to a not detached "screen" session.)
Troubleshooting
From inside "become", "screen" currently (cf. phab:T52248) outputs an error:
local-dbreps@tools-login:~$ screen
Cannot open your terminal '/dev/pts/50' - please check.
You can work around this by running script /dev/null (you can first read man script to figure out what "script" does). A second workaround is running "screen" first and then running "become" from inside "screen". However, per the cloud listserv, "screen" should not be used by tool accounts and instead jobs should be submitted via the Toolforge Jobs Framework.
External link
- http://www.guckes.net/screen/ Sven Guckes "screen" pages
- "I like to know which system I am currently on inside of a "screen" window, which shell server I am on, and the date and time in UTC" / handling the ssh agent -> Ryan's blog with really nice additions to .screenrc/.bashrc