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 can be listed with the jobs 
  command. When Bash starts a job asynchronously, it prints a line that looks 
  like: 
[1] 25647
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 
  operating 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 process. 
If the operating system on which Bash is running supports job control, Bash 
  contains facilities to use it. Typing the suspend character (typically 
  '^Z', Control-Z) while a process is running causes that process 
  to be stopped and returns control 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. The user then manipulates 
  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 can be referred to as '%n'. 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 or started 
  in the background. The previous job can 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 '-'. 
A job can 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. 
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 enabled, Bash 
  reports such changes immediately. 
If an attempt is made to exit Bash is while jobs are stopped, the shell prints 
  a message warning that there are stopped jobs. The jobs command 
  can then be used to inspect their status. If a second attempt to exit is made 
  without an intervening command, Bash does not print another warning, and the 
  stopped jobs are terminated.
When job control is not active, the kill and wait builtins do not accept jobspec arguments. They must be supplied process IDs.
Related linux commands:
bg - Resume the suspended job jobspec in the 
background.
cron - Daemon to execute scheduled commands.
fg  - Resume the suspended job jobspec in the foreground.
jobs - list the active jobs.
disown - Remove job from the table of active jobs.
suspend - Suspend the execution of this shell.
wait - Wait until the child process exits.
PowerShell equivalent: Scheduler cmdlets