Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

csh(1)

kill(1)

ksh(1)

ps(1)

sh(1)

stop(1)

shell_builtins(1)

stty(1)

signal(5)

jobs(1)

NAME

jobs, fg, bg, stop, notify − shell built-in functions to control process execution

SYNOPSIS

sh

jobs [ −p | −l ]  [%jobid ... ]

jobs −x command [ arguments ]

fg [ %jobid ... ]

bg [ %jobid ... ]

stop %jobid ...

stop pid ...

csh

jobs.[ −l ]

fg [ %job ]

bg [ % job] ...

notify [ %job ] ...

stop %jobid ...

stop pid ...

ksh

jobs [ −lnp ] [ %job ... ]

fg [ %job ... ]

bg [ %job ... ]

stop %jobid ...

stop pid ...

DESCRIPTION

sh

When Job Control is enabled, jobs reports all jobs that are stopped or executing in the background.  If %jobid is omitted, all jobs that are stopped or running in the background will be reported.  The following options will modify/enhance the output of jobs:

−l Report the process group ID and working directory of the jobs. 

−p Report only the process group ID of the jobs. 

−x Replace any jobid found in command or arguments with the corresponding process group ID, and then execute command passing it arguments. 

When the shell is invoked as jsh, Job Control is enabled in addition to all of the functionality described previously for sh.  Typically Job Control is enabled for the interactive shell only.  Non-interactive shells typically do not benefit from the added functionality of Job Control. 

With Job Control enabled every command or pipeline the user enters at the terminal is called a job.  All jobs exist in one of the following states: foreground, background or stopped.  These terms are defined as follows: 1) a job in the foreground has read and write access to the controlling terminal; 2) a job in the background is denied read access and has conditional write access to the controlling terminal (see stty(1)); 3) a stopped job is a job that has been placed in a suspended state, usually as a result of a SIGTSTP signal (see signal(5)). 

Every job that the shell starts is assigned a positive integer, called a job number which is tracked by the shell and will be used as an identifier to indicate a specific job.  Additionally the shell keeps track of the current and previous jobs.  The current job is the most recent job to be started or restarted.  The previous job is the first non-current job. 

The acceptable syntax for a Job Identifier is of the form:

%jobid

where, jobid may be specified in any of the following formats:

% or + for the current job

− for the previous job

?<string> specify the job for which the command line uniquely contains string. 

n for job number n, where n is a job number

pref where pref is a unique prefix of the command name (for example, if the command ls −l name were running in the background, it could be referred to as %ls); pref cannot contain blanks unless it is quoted. 

When Job Control is enabled, fg resumes the execution of a stopped job in the foreground, also moves an executing background job into the foreground.  If %jobid is omitted the current job is assumed. 

When Job Control is enabled, bg resumes the execution of a stopped job in the background.  If %jobid is omitted the current job is assumed. 

stop stops the execution of a background job(s) by using its jobid, or of any process by using its pid. (see ps(1))

csh

jobs, without an argument, lists the active jobs under job control. 

−l List process IDs, in addition to the normal information. 

The shell associates a numbered job with each command sequence to keep track of those commands that are running in the background or have been stopped with TSTP signals (typically CTRL-z).  When a command or command sequence (semicolon separated list) is started in the background using the & metacharacter, the shell displays a line with the job number in brackets and a list of associated process numbers:

[1] 1234

To see the current list of jobs, use the jobs built-in command.  The job most recently stopped (or put into the background if none are stopped) is referred to as the current job and is indicated with a ‘+’.  The previous job is indicated with a ‘−’; when the current job is terminated or moved to the foreground, this job takes its place (becomes the new current job). 

To manipulate jobs, refer to the bg, fg, kill, stop, and % built-in commands. 

A reference to a job begins with a ‘%’.  By itself, the percent-sign refers to the current job. 

%   %+   %% The current job. 

%− The previous job. 

%j Refer to job j as in: ‘kill −9 %j’.  j can be a job number, or a string that uniquely specifies the command line by which it was started; ‘fg %vi’ might bring a stopped vi job to the foreground, for instance. 

%?string Specify the job for which the command line uniquely contains string.

A job running in the background stops when it attempts to read from the terminal.  Background jobs can normally produce output, but this can be suppressed using the ‘stty tostop’ command. 

fg brings the current or specified job into the foreground. 

bg runs the current or specified jobs in the background. 

stop stops the execution of a background job(s) by using its jobid, or of any process by using its pid. (see ps(1)). 

notify will notify the user asynchronously when the status of the current job or specified jobs changes. 

ksh

jobs lists information about each given job; or all active jobs if job is omitted.  The −l flag lists process ids in addition to the normal information.  The −n flag only displays jobs that have stopped or exited since last notified.  The −p flag causes only the process group to be listed.  If the monitor option of the set command is turned on, an interactive 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 which looks like:

[1] 1234
indicating 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 (CTRL-Z) which sends a STOP signal to the current job.  The shell will then normally indicate 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 then 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.  A job being run in the background will stop if it tries to read from the terminal.  Background jobs are normally allowed to produce output, but this can be disabled by giving the command “stty tostop”.  If you set this tty option, then background jobs will stop when they try to produce output like they do when they try to read input.  There are several ways to refer to jobs in the shell.  A job can be referred to by the process id of any process of the job or by one of the following:

%number The job with the given number. 

%string Any job whose command line begins with string.

%?string Any job whose command line begins with string.

%?string Any job whose command line contains string.

%% Current job. 

%+ Equivalent to %%. 

%− Previous job. 

The shell learns immediately whenever a process changes state.  It normally informs you whenever a job becomes blocked so that no further progress is possible, but only just before it prints a prompt.  This is done so that it does not otherwise disturb your work.  When the monitor mode is on, each background job that completes triggers any trap set for CHLD.  When you try to leave the shell while jobs are running or stopped, you will be warned that ‘You have stopped(running) jobs.’ You may use the jobs command to see what they are.  If you do this or immediately try to exit again, the shell will not warn you a second time, and the stopped jobs will be terminated. 

The fg command is only on systems that support job control.  Each job specified is brought to the foreground.  Otherwise, the current job is brought into the foreground. 

The bg command is only on systems that support job control.  bg puts each specified job into the background.  The current job is put in the background if job is not specified. 

stop stops the execution of a background job(s) by using its jobid, or of any process by using its pid. (see ps(1))

SEE ALSO

csh(1), kill(1), ksh(1), ps(1), sh(1), stop(1), shell_builtins(1), stty(1) signal(5)

SunOS 5.4  —  Last change: 15 Apr 1994

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026