0% found this document useful (0 votes)
40 views

Today's Topic: - UNIX Process Relationship and Job Control

This document discusses UNIX process groups, sessions, and job control. It covers: 1) Process groups allow processes to be grouped together and receive signals as a group. Each group has a process group ID (pgid). 2) Sessions contain one or more process groups and have a single controlling terminal. Only one process group can be foreground in a session at a time. 3) Foreground process groups have control of the terminal and receive signals like SIGINT. Background groups do not receive terminal signals and cannot read from the terminal.
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
40 views

Today's Topic: - UNIX Process Relationship and Job Control

This document discusses UNIX process groups, sessions, and job control. It covers: 1) Process groups allow processes to be grouped together and receive signals as a group. Each group has a process group ID (pgid). 2) Sessions contain one or more process groups and have a single controlling terminal. Only one process group can be foreground in a session at a time. 3) Foreground process groups have control of the terminal and receive signals like SIGINT. Background groups do not receive terminal signals and cannot read from the terminal.
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 12

Todays topic

UNIX process relationship and job control


Groups, Sessions, Foreground and background processes

Our program can now have many processes, when Ctrl-C is typed,
which process should receive SIGINT?
Process groups

A process group is a collection of (related)


processes. Each group has a process group ID.
Each group has a group leader who pid = pgid
To get the group ID of a process:
pid_t getpgrp(void)

A signal can be sent to the whole group of


processes.
Process groups:
A process may joint an existing group, create a
new group.
int setpgid(pid_t, pid, pid_t, pgid)
A process can set group ID of itself or its children
_POSIX_JOB_CONTROL must be defined

Most shells with job control create new group for


each line of command (job).
Sessions
A session is one or more process groups
proc1 | proc2 &
proc3 | proc4 | proc5
results in a session with three groups, see ps j

Login shell proc1 proc3

proc2 proc4

proc5

A login shell is a session in general.


Session
A session can have a single controlling
terminal
Terminal device for a terminal login
Pseudo-terminal device for a network login
The I/O devices somewhat link to the window and
keyboard.

The session leader that establishes the


connection to the control terminal is called the
controlling process.
Session
Only one I/O device for all processes (and process groups) in a
session. Which process should get the input from the keyboard?

Foreground and background process


One foreground group
Many background groups
Input
Only foreground group
Terminals interrupt signals are only sent to the processes in the
foreground group.
Output
Typically shared
Sessions
To establish a new session:
pid setsid(void);
Process become the session leader
Process become a new group leader of a new group
Process has no controlling terminal (break up the old one)
Each shell is a session. When a shell is created, a terminal
must be setup.
Fails if the caller is a group leader.
A process can open file /dev/tty to talk to the
controlling terminal regardless how standard IO are
redirected.
A way to by pass I/O redirection, see example1.c
How to make a group foreground and
background?
So that the terminal device driver knows where
to send the terminal input and the terminal-
generated signals.

pid_t tcgetpgrp(int filedes);


Return the process group ID of the foreground process group
associated with fieldes.
int tcsetpgrp(int filedes, pid_t pgrpid);
If the process has control terminal, set the foreground
process group ID to pgrpid.
Pgrpid must be group ID in the same session.
Job control
Allows start multiple jobs from a single terminal and
control which job can access the terminal.
Foreground jobs can access terminal
Background jobs may not:
When a backgound job try to read, SIGTTIN signal is sent
A background job must be able to output to the terminal
(options may be set by the stty command)
See control.c for an example of switching terminal
among groups.
Orphaned process group:
Parent of every member is either in the orphaned group
or is not a member of the groups session.
Happens when a process forks a child and then
dies.
The child becomes a member of the orphaned group.
Can have problems: the child may transform from a foreground
process to a background process automatically.
Remember in the control.c program, foreground group is set in both the
parent and the child.
Can be in an inconsistent state.
If any IO is involved, strange things may happen.
How to make sure that a shell program
handles terminal I/O and signals correctly
Create a new group for each job
Both parent and child do setpgid
For foreground job:
After fork, shell set tcsetpgrp to give foreground jobs
control over terminal
Shell waits for all foreground processes in the
foreground job to finish. After that, shell set
tcsetpgrp to itself and print the prompt.
For background job:
Create a separate group so that processes in
background jobs do not have access to terminal.
Review
What do tcgetpgrp and tcsetpgrp do?
How are foreground and background
processes different?
How can a shell make sure that the signal is
only sent to the foreground processes?

You might also like