(features.info)Job Control Basics
Job Control Basics
Job control refers to the ability to selectively stop (suspend) the
execution of processes and continue (resume) their execution at a later
point. A user typically employs this facility via an interactive
interface supplied jointly by the system's terminal driver and Bash.
The shell associates a JOB with each pipeline. It keeps a table of
currently executing jobs, which may be listed with the `jobs' command.
When Bash starts a job asynchronously (in the background), it prints a
line that looks like:
indicating that this job is job number 1 and that the process ID of
the last process in the pipeline associated with this job is 25647.
All of the processes in a single pipeline are members of the same job.
Bash uses the JOB abstraction as the basis for job control.
To facilitate the implementation of the user interface to job
control, the system maintains the notion of a current terminal process
group ID. Members of this process group (processes whose process group
ID is equal to the current terminal process group ID) receive
keyboard-generated signals such as `SIGINT'. These processes are said
to be in the foreground. Background processes are those whose process
group ID differs from the terminal's; such processes are immune to
keyboard-generated signals. Only foreground processes are allowed to
read from or write to the terminal. Background processes which attempt
to read from (write to) the terminal are sent a `SIGTTIN' (`SIGTTOU')
signal by the terminal driver, which, unless caught, suspends the
If the operating system on which Bash is running supports job
control, Bash allows you to use it. Typing the SUSPEND character
(typically `^Z', Control-Z) while a process is running causes that
process to be stopped and returns you to Bash. Typing the DELAYED
SUSPEND character (typically `^Y', Control-Y) causes the process to be
stopped when it attempts to read input from the terminal, and control to
be returned to Bash. You may then manipulate the state of this job,
using the `bg' command to continue it in the background, the `fg'
command to continue it in the foreground, or the `kill' command to kill
it. A `^Z' takes effect immediately, and has the additional side
effect of causing pending output and typeahead to be discarded.
There are a number of ways to refer to a job in the shell. The
character `%' introduces a job name. Job number `n' may be referred to
as `%n'. A job may also be referred to using a prefix of the name used
to start it, or using a substring that appears in its command line.
For example, `%ce' refers to a stopped `ce' job. Using `%?ce', on the
other hand, refers to any job containing the string `ce' in its command
line. If the prefix or substring matches more than one job, Bash
reports an error. The symbols `%%' and `%+' refer to the shell's
notion of the current job, which is the last job stopped while it was
in the foreground. The previous job may be referenced using `%-'. In
output pertaining to jobs (e.g., the output of the `jobs' command), the
current job is always flagged with a `+', and the previous job with a
Simply naming a job can be used to bring it into the foreground:
`%1' is a synonym for `fg %1' bringing job 1 from the background into
the foreground. Similarly, `%1 &' resumes job 1 in the background,
equivalent to `bg %1'
The shell learns immediately whenever a job changes state.
Normally, Bash waits until it is about to print a prompt before
reporting changes in a job's status so as to not interrupt any other
output. If the the `-b' option to the `set' builtin is set, Bash
reports such changes immediately (Note: The Set Builtin.). This
feature is also controlled by the variable `notify'.
If you attempt to exit bash while jobs are stopped, the shell prints
a message warning you. You may then use the `jobs' command to inspect
their status. If you do this, or try to exit again immediately, you
are not warned again, and the stopped jobs are terminated.
Next: Job Control Builtins Up: Job Control
[ Dokumentation lokal installierter Software ]