A stopped job is one that has been temporarily put into the background and is no longer running, but is still using resources (i.e. system memory). Because that job is not attached to the current terminal, it cannot produce output and is not receiving input from the user.
You can see jobs you have running using the jobs
builtin command in bash, probably other shells as well. Example:
user@mysystem:~$ jobs
[1] + Stopped python
user@mysystem:~$
You can resume a stopped job by using the fg
(foreground) bash built-in command. If you have multiple commands that have been stopped you must specify which one to resume by passing jobspec number on the command line with fg
. If only one program is stopped, you may use fg
alone:
user@mysystem:~$ fg 1
python
At this point you are back in the python interpreter and may exit by using control-D.
Conversely, you may kill
the command with either it's jobspec or PID. For instance:
user@mysystem:~$ ps
PID TTY TIME CMD
16174 pts/3 00:00:00 bash
17781 pts/3 00:00:00 python
18276 pts/3 00:00:00 ps
user@mysystem:~$ kill 17781
[1]+ Killed python
user@mysystem:~$
To use the jobspec, precede the number with the percent (%) key:
user@mysystem:~$ kill %1
[1]+ Terminated python
If you issue an exit command with stopped jobs, the warning you saw will be given. The jobs will be left running for safety. That's to make sure you are aware you are attempting to kill jobs you might have forgotten you stopped. The second time you use the exit command the jobs are terminated and the shell exits. This may cause problems for some programs that aren't intended to be killed in this fashion.
In bash it seems you can use the logout
command which will kill stopped processes and exit. This may cause unwanted results.
Also note that some programs may not exit when terminated in this way, and your system could end up with a lot of orphaned processes using up resources if you make a habit of doing that.
Note that you can create background process that will stop if they require user input:
user@mysystem:~$ python &
[1] 19028
user@mysystem:~$ jobs
[1]+ Stopped python
You can resume and kill these jobs in the same way you did jobs that you stopped with the Ctrl-z
interrupt.