Linux screen Command: Keep Processes Running Despite a Dropped Connection

I guess you all know this: you are connected to your server with SSH and in the middle of compiling some software (e.g. a new kernel) or doing some other task which takes lots of time, and suddenly your connection drops for some reason, and you lose your unfinished work. This can be very annoying, but fortunately, there is a small utility called screen which lets you reattach to a previous session so that you can finish your task. This short tutorial shows how to use screen for just this purpose.

1 Installing the screen command

The installation of screen is very easy. On Debian, run:

apt-get install screen

For Ubuntu, use the command with sudo:

sudo apt-get install screen

And for Fedora, CentOS, SuSE, and Mandriva there are also screen packages that you can install with yum/yast/urpmi/...

Fedora and CentOS

yum install screen

2 Using screen Command

With screen you can create one or more sessions in your current SSH terminal. Just run

screen

to start it. This creates a screen session or window (although you don't see it as such) in your current SSH terminal:

Linux screen command started

Press Space or Return to get to the command prompt:

Linux screen command prompt

Looks like your normal SSH terminal, doesn't it?

Now I'm going to describe the most important screen commands that you need to control screen. These commands begin with CTRL a to distinguish them from normal shell commands.

  • Ctrl a c - Creates a new screen session so that you can use more than one screen session at once.
  • Ctrl a n - Switches to the next screen session (if you use more than one).
  • Ctrl a p - Switches to the previous screen session (if you use more than one).
  • Ctrl a d - Detaches a screen session (without killing the processes in it - they continue).

To close a screen session where all tasks are finished you can type

exit

Now let's play around with it a little bit. In our screen window, we run the command

top

This should look like this:

Top command running within screen

Now let's create another screen session by typing

Ctrl a c

A new, blank screen session opens, and there we run

tail -f /var/log/mail.log

to have an ongoing look at our mail log:

mail.log shown in screen command

Now you can browse your two screen sessions by running

Ctrl a n

or

Ctrl a p

To detach a screen session and return to your normal SSH terminal, type

Ctrl a d

Back on your normal SSH terminal, you can run

screen -ls

to get a list of your current screen sessions:

There are screens on:
        2477.pts-0.server1      (Detached)
        2522.pts-0.server1      (Detached)
2 Sockets in /var/run/screen/S-root.

To reconnect to one of these sessions, run

screen -r 2477.pts-0.server1

where 2477.pts-0.server1 is the name of one of the sessions from the screen -ls output.

To leave and finish a screen session, finish all current tasks in it (top can be finished by typing q, tail -f /var/log/mail.log can be finished by typing CTRL c) and then type

exit

You will then fall back to another screen session (if you use more than one) or to the normal SSH terminal, if no more screen sessions are open.

If you want to learn more about screen, run

man screen

3 My Connection Dropped - What Can I Do?

Now let's assume you compile a kernel in a screen session, something which normally takes a long time, and suddenly your connection drops. Thanks to screen your work isn't lost. Once your connection is back up, log in to your system with SSH again and run

screen -ls

as shown in chapter 2. From the results pick one session (e.g. 2477.pts-0.server1) and reattach to it:

screen -r 2477.pts-0.server1

If you picked the right session, you should find your kernel still compiling (if it hasn't finished in the meantime) so that you can continue your work.

Share this page:

Suggested articles

17 Comment(s)

Add comment

Comments

By:

Information on screen is surprisingly hard to find, maybe because the name is impossible to search on. 

This page is pretty good.

By: opyate

I usually search the web for "screenrc" which is sure to find stuff related to screen :)

By:

An article about screen can be  very useful, since most new users are unaware of such a utility. In fact, most users never even realise that such a capability could be possible on the command line! But unfortunately, the article does not do a very good job at providing a clear introduction to screen.

1) The text is thoroughly confused about terminology. What the author refers to as "sessions", are actually called "windows" in the screen manpage.

2) The article also confuses a screen window (incorrectly called a session) with the shell running inside it. "exit" has nothing to do with screen. The text says: "To close a screen session where all tasks are finished you can type ''exit''". Exit is not a screen command, its a shell command. It does not close a screen session, it can possibly close the current screen window, because it actually causes the shell to exit.

3) The description of detaching and reattaching sessions is the only part that actually talks about sessions, and not about windows. But it is not consistent in the running example. The article fails to explain how a user can end up with two sessions in the "screen -ls" example. 

The author should definitely spend some time checking their facts and making sure their introduction on the topic does not confuse basic terms like this. Here is a very good introduction to screen for reference:

 http://www.kuro5hin.org/story/2004/3/9/16838/14935

By:

Dear sameerds, the article is clear a and very understanble, if you think you can write better one, just do it, but this one is FINE! ;-)

Thanks for posting, dude, this is exactly what I've been looking for. Google got it in first hit ;-) Simply great!

By: Anonymous

This article was very useful to me, thanks for taking the time to write it!

-A

By: r00t.gr

sameerds, the article is great, who cares if the manual calls them "Sessions" or windows, the point is to introduce the command to people who doesn't know it.

By: Anonymous

Thanks for this, it's been a great help... the man page on 'screen' is huge. This is right to the point.

By: Anonymous

Yeah, but for some reason, the hot-keys were not included on the --help option, it only shows the options available. Luckily I ran on this article.

By: Leif

If you've ever had to manage remote servers from my family farmhouse with DSL over 1940's telephone poles that run a half mile from the country road through a winter storm, you'll know what a lifesaver the "screen" command

 write error - broken pipe

By: truefx001

Hi Screen session keeps vanishing after 10-12 days I'm running a multiplayer host and every 10-12 connection is lost and when I try screen -ls  No Sockets found , any idea on how to solve this problem on my virtual hosted server.

Thanks

 

By: Kent Johnson

I really like this documentation. It is clear and quick to use. This is something I am glad I added to my UNIX toolbox.

By: Roger Heathcote

Also useful if you want to attach to a session you've left attached elsewhere is the command line option -d which forces the other machine(s) to detatch. If you want to connect without detatching other machines (i.e. share a session) use the option -x

By: Zach

Another trick worth looking into (and i'm no server expert here) is the "nohup [command] &" command which allows you to disconnect and let a process run without your connection.  Worth looking into.  I had problems with screens disconnecting when I shut my computer down.

By: shresta

Beautiful piece of information. Very consise and just what is needed. 

By: Diamond

Thanks for this, it's been a great help... the man page on 'screen' is huge. This is right to the point.

 

By: chaovite

Thanks very much! Very short and informative tutorial!

By: Maciej

Whenever I have option, I use tmux instead, so much better, nicer, cleaner tool...