“There are stopped jobs” – what does this message mean?Here’s something I’ve not been able to find in the mailing list archives.
I’m running 2.2.7 RELEASE. I had three telnet sessions going. All were su’d. I did an exit on one. I got a message "There are stopped jobs". I tried the same thing on telnet session #2, got the same message. On telnet #3, I did an exit, then another to logout. The other telnet sessions would then close. What was going on?
I suspect I had started a process by pressing CONTROL-Z. This sounds vaguely familiar to me. I was running ipmon to test the logging as part of my IP Filter work.
I was running the bash shell (Changing the shell). See the "JOB CONTROL" section of man bash for more information. Here is an extract:
If an attempt to exit bash is made while jobs are stopped, the shell prints a warning message. The jobs command may then be used to inspect their status. If a second attempt to exit is made without an intervening command, the shell does not print another warning, and the stopped jobs are terminated.
If you type exit twice in a row, or type jobs and then exit, the shell will not warn you about any stopped jobs. I now think that I typed exit twice in my scenario described at the start of this article.
bg and fg – 31 December 1998Laz on undernet #freebsd mentioned that I should do a "man fg". On about the 6th page, you will find a section titled Jobs. Read this section. It contains interesting facts about how to take a job to and from the background. I’ve reproduced some of that section below:
Jobs The shell associates a job with each pipeline. It keeps a table of current jobs, printed by the jobs command, and assigns them small integer numbers. When a job is started asynchronously with `&', the shell prints a line that looks like:  1234 showing that the job which was started asynchronously was job number 1 and had one (top-level) process, whose process id was 1234. If you are running a job and wish to do something else you may hit the key ^Z (control-Z) which sends a STOP signal to the current job. The shell will then normally show that the job has been `Stopped', and print another prompt. You can then manipulate the state of this job, putting it in the background with the bg command, or run some other commands and eventually bring the job back into the foreground with the foreground command fg. A ^Z takes effect immediately and is like an interrupt in that pending output and unread input are discarded when it is typed. There is another special key ^Y that does not generate a STOP signal until a program attempts to read(2) it. This request can usefully be typed ahead when you have prepared some commands for a job that you wish to stop after it has read them.