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

Process Relationships

This document discusses Linux process relationships including terminal and network logins, process groups, sessions, and job control. Terminal logins involve the init, getty, and login processes to authenticate users and start their shell. Network logins use inetd to handle incoming connections and start services like telnetd. Process groups are collections of related processes that have a group ID and leader. Sessions are collections of process groups that can have a controlling terminal. Job control allows running and managing multiple foreground and background process groups.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views

Process Relationships

This document discusses Linux process relationships including terminal and network logins, process groups, sessions, and job control. Terminal logins involve the init, getty, and login processes to authenticate users and start their shell. Network logins use inetd to handle incoming connections and start services like telnetd. Process groups are collections of related processes that have a group ID and leader. Sessions are collections of process groups that can have a controlling terminal. Job control allows running and managing multiple foreground and background process groups.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 20

Process Relationships

 Terminal and Network Logins


 Process Groups and Sessions
 Job Control
 Relationships
Terminal Logins
 Terminals
 Point to Point connection
 Local – hard wired
 Remote – direct connection via modem
Terminal Login Process
 init reads terminal configuration file /etc/ttys
(/etc/inittab for Linux)
 init process forks and execs getty for each
terminal
 getty opens terminal device for reading and
writing and sets up standard file descriptors
0, 1 and 2
 getty prompts for username and execs login
execle(“/bin/login”, “login”, “-p”, username,
(char *) 0, envp);
Terminal Login Process
 login retrieves encrypted password stored in
shadow file using getpwnam function.
 login calls getpass function to prompt for
password. It then encrypts it by calling crypt
function and compares result to what it
retrieved from the shadow file
 If not successful, login will exit with status 1
and init will fork a new getty process for that
terminal
Terminal Login Process
 If successful login will
 Change to user’s home directory (chdir)
 Change the terminal device ownership to the user
(chown) so that we can read/write it
 Set group IDs (setgid and initgroups)
 Setup some of the environment variables
 Set user IDs (setuid)
 Exec our default shell
execl(“/bin/sh”, “-sh”, (char *)0);
Network Logins
 Unknown, possibly large number of
connections. Not practical to fork a getty for
each possible one
 Wait for an incoming network connection,
and create a process as needed
 Pseudo-terminal is a converter acts like a
terminal to the rest of the system but can
communicate with the network as well
Network Login Process
 Internet Supervisor – inetd process.
When system starts up, init forks a shell
that runs commands in /etc/rc. One of
those is a command to start the initd
process. Once the shell exits, the inetd
process is inherited by init
 inetd listens for TCP/IP connections and
forks/execs the appropriate program
Network Login Process
 In the case of TELNET, inetd forks and
execs telnetd
 telnetd creates the pseudo terminal and
forks a child
 Parent handles network communication
 Child execs login
 Parent and child are connected through the
pseudo terminal
Process Groups
 Collection of related processes
 Each group has a group ID. Like PIDs,
these are positive ints

pid_t getpgrp(void);
pid_t getpgid(pid_t pid);
 Gets the process group ID of the

current process or the specified process


Process Groups
 Each process group has a leader. The leader
of the group is the process that has a PID
equal to the PGID

int setpgid(pid_t pid, pid_t pgid);


 Sets the PGID for the process specified by PID
 If pid is 0, current process is assumed
 If pgid is 0, value of pid is used
 setpgid(0,0) commonly used to create a new
group
Sessions
 A session is a collection of one or more
process groups
Creating A New Session
pid_t setsid(void)
 If process is already a process group leader,
returns -1
 If process is not already a process group
leader
 A new session is created, and the calling process
is its leader
 A new process group is created with the calling
process as its leader
 Process has no controlling terminal. If it already
had one, the connection is broken
Controlling Terminal
 Sessions can have at most one controlling terminal (usually the
terminal or pseudo terminal that we log in from)
 Session leader that opens the terminal is called the controlling
process
 If the session has a controlling terminal then it has one
foreground process group and may have several background
process groups
 Foreground process group receives terminal input
 SIGINT Ctrl-C
 SIGQUIT Ctrl-\
 SIGTSTP Ctrl-Z
 Network (or modem) disconnect causes a signal (SIGHUP) to be
sent to the controlling process (session leader)
tcgetpgrp, tcsetpgrp and
tcgetsid functions
pid_t tcgetpgrp(int fd);
 Returns the process group ID of the foreground process for
the terminal open on the given file descriptor
int tcsetpgrp(int fd, pid_t pgrp);
 Instructs the kernel to make the process group indicated by
pgrp the foreground process group of the session associated
with the controlling terminal fd. The pgrp ID must be a valid
process group within the session associated with the
terminal on fd.
pid_t tcgetsid(int fd);
 Returns the session id given a file descriptor to the
controlling terminal
Job Control
 Allows us to run multiple process groups
(jobs) simultaneously
 Must be able to control which process is the
foreground process and be able to stop and
continue processes
 Job control requires
 A shell that supports it (Bourne doesn’t)
 Terminal driver supports it
 Kernel supports certain signals
Shell Execution of Programs
 When we type in a command the shell does a
fork and exec
 If it’s a foreground process the parent waits
 If it’s a background process the parent continues
 Pipeline – ex: ls | grep “hello”
 Process order depends on shell
 Often last command is forked first
Examples
ps –o pid,ppid,pgid,sid,tpgid,comm
PID PPID PGID SID TPGID COMMAND
28398 28397 28398 28398 28478 bash
28478 28398 28478 28398 28478 ps
Examples
ps –o pid,ppid,pgid,sid,tpgid,comm &

PID PPID PGID SID TPGID COMMAND


28398 28397 28398 28398 28398 bash
28509 28398 28509 28398 28398 ps
Examples
ps –o pid,ppid,pgid,sid,tpgid,comm | cat
PID PPID PGID SID TPGID COMMAND
28398 28397 28398 28398 28517 bash
28517 28398 28517 28398 28517 ps
28518 28398 28517 28398 28517 cat
Examples
ps –o pid,ppid,pgid,sid,tpgid,comm | cat&
PID PPID PGID SID TPGID COMMAND
28398 28397 28398 28398 28398 bash
28542 28398 28542 28398 28398 ps
28543 28398 28542 28398 28398 cat

You might also like