Presentation is loading. Please wait.

Presentation is loading. Please wait.

Today’s topic UNIX process relationship and job control

Similar presentations


Presentation on theme: "Today’s topic UNIX process relationship and job control"— Presentation transcript:

1 Today’s 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?

2 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.

3 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).

4 Sessions A session is one or more process groups
proc1 | proc2 & proc3 | proc4 | proc5 results in a session with three groups, see ‘ps –j’ A login shell is a session in general. Login shell proc1 proc3 proc2 proc4 proc5

5 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.

6 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

7 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

8 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.

9 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.

10 Orphaned process group:
Parent of every member is either in the orphaned group or is not a member of the group’s 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.

11 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.

12 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?


Download ppt "Today’s topic UNIX process relationship and job control"

Similar presentations


Ads by Google