439

How can I resume a stopped job in Linux? I was using emacs and accidentally hit ctrl-z which blasted me back to the console. I can see it when I type 'jobs'

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp
shgnInc
  • 435
  • 7
  • 17
Bobby
  • 4,501
  • 3
  • 15
  • 6
  • 1
    This is actually a fairly normal work flow for Vim, if you want to keep you commands in your bash history, then you hit `Ctrl-z` type your commands and then resume. Obviously you can run commands without leaving Vim via the `:!` ed command – icc97 Jul 11 '18 at 02:32

5 Answers5

507

The command fg is what you want to use. You can also give it a job number if there are more than one stopped jobs.

Ilkka
  • 5,326
  • 1
  • 15
  • 8
337

The general job control commands in Linux are:

  • jobs - list the current jobs
  • fg - resume the job that's next in the queue
  • fg %[number] - resume job [number]
  • bg - Push the next job in the queue into the background
  • bg %[number] - Push the job [number] into the background
  • kill %[number] - Kill the job numbered [number]
  • kill -[signal] %[number] - Send the signal [signal] to job number [number]
  • disown %[number] - disown the process(no more terminal will be owner), so command will be alive even after closing the terminal.

That's pretty much all of them. Note the % infront of the job number in the commands - this is what tells kill you're talking about jobs and not processes.

Thomas Hunter
  • 811
  • 1
  • 9
  • 15
Majenko
  • 32,128
  • 4
  • 61
  • 81
  • 48
    I avoid "kill %1" because mistyping it as "kill 1" is really really bad :) –  Apr 08 '11 at 14:05
  • 7
    @barrycarter That's very true. I usually do an `fg` and a `Ctrl-C` ;) – Majenko Apr 08 '11 at 14:08
  • 7
    @barry: Which is why init in Upstart ignores SIG{TERM,KILL} by default. – Hello71 Apr 19 '11 at 02:26
  • 7
    And, of course, "never run as root" ;) –  Apr 19 '11 at 03:04
  • 1
    Why use "%" character. Is it required to be prepended before the job number or Is it a unix convention to specify the int type ? – Talespin_Kit Feb 28 '20 at 05:03
  • @Talespin_Kit I have no idea why the commands require the % character. It was a design choice by the first person to implement the commands, either working at AT&T or one of the Berkeley BSD programmers many decades ago. – Majenko Feb 28 '20 at 11:00
  • To the list of commands, you can also add `nohup`. – Petr Vepřek Mar 22 '21 at 11:06
54

You can also type %<process_name>; i.e., you hit Ctrl-Z in emacs, then you can type %emacs in the console and bring it back to the foreground.

NickD
  • 541
  • 4
  • 2
37

Just to add to the other answers, bash lets you skip the fg if you specify a job number.

For example, these are equivalent and resume the latest job:

%
%%
fg
fg %

These resume job #4:

%4
fg 4
u1686_grawity
  • 426,297
  • 64
  • 894
  • 966
  • 3
    While this is kind of cool, I still find it easier to type `fg` than `%`. – rr- Oct 10 '14 at 17:10
  • 4
    `%` is awesome, thanks! As a touch-typist, I find `fg` very irritating (same finger). But then, so is `cd`. – Gauthier Apr 15 '15 at 13:45
  • 1
    And you can start it in the background with either `bg %` or just `% &`. – Wildcard Aug 16 '16 at 18:43
  • in my case when i tried to use fg i see the stopped process appears and disappears quickly and just succeeded to restore it. – Lafi Jun 25 '19 at 12:54
32

If you didn't launch it from current terminal, use ps aux | grep <process name> to find the process number (pid), then resume it with:

kill -SIGCONT <pid>

(Despite the name, kill is simply a tool to send a signal to the process, allowing processes to communicate with each other. A "kill signal" is only one of many standard signals.)

Bonus tip: wrap the first character of the process name with [] to prevent the grep command itself appearing in the results. e.g. to find emacs process, use ps aux | grep [e]macs

mahemoff
  • 1,023
  • 1
  • 11
  • 16