Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 18

Chapter 3

UNIX PROCESS
(Animations)
Process Creation and Termination

Operating System Concepts – 9th Edition Silberschatz, Galvin and Gagne ©2013
UNIX Process

http://duckopensource.blogspot.com/2012/12/apostila-de-programacao-shell-rubens.html
 Unix shell a command-
line interpreter that provides
a traditional user interface.

• Shell creates a new process every time it runs a


program for the command entered by a user.
2.2
2
Silberschatz, Galvin and Gagne ©2013
Operating System Concepts – 9th Edition
 Examples 3.1a:

$cat file1 file2


shell creates a process to run command cat

http://s0.cyberciti.org/uploads/faq/2012/02/cat-command-with-numbers.png

Operating System Concepts – 9 Edition


th 2.3 Silberschatz, Galvin and Gagne ©2013
• Example 3.1b:
$ls | wc -l
2 processes are created to run ls and wc
concurrently

Operating System Concepts – 9th Edition 2.4 Silberschatz, Galvin and Gagne ©2013
Tree of Processes in Unix

Operating System Concepts – 9th Edition 2.5 Silberschatz, Galvin and Gagne ©2013
Creating and Terminating Process
 fork() system call is to create a process:
 pid = fork() – creates a child process where a
child process is a copy of the parent process.
 Called without any argument.

 Will return an integer value to variable pid.


 Parent process – a process id for child process (+ve value)
 Child process – zero

 exit() system call is to terminate a process

Operating System Concepts – 9th Edition 2.6 Silberschatz, Galvin and Gagne ©2013
Application of fork()
 To make a duplicate of a process so that a copy will do one
task while another do another task.

 To execute another program


 use exec() system call after fork()

Operating System Concepts – 9th Edition 2.7 Silberschatz, Galvin and Gagne ©2013
fork()

Before fork() After fork()

printf(“One\n”) printf(“One\n”)
pid = fork() PC pid = fork()
printf(“Two\n”) printf(“Two\n”) PC

printf(“One\n”)
What is the output of pid = fork()
the program? printf(“Two\n”) PC
One
Two
Two

Operating System Concepts – 9th Edition 2.8 Silberschatz, Galvin and Gagne ©2013
fork(): Example 3.1

pid1 = fork();
pid2 = fork();
print pid1, pid2;

Total number of processes created is 4

Operating System Concepts – 9th Edition 2.9 Silberschatz, Galvin and Gagne ©2013
Id= 4
pid1 = fork(); pid1 =
pid2 = fork(); pid2 =
print pid1, pid2;

Operating System Concepts – 9th Edition 2.10 Silberschatz, Galvin and Gagne ©2013
Id= 4
pid1 = fork(); pid1 = 5
1 pid2 = fork(); pid2 =
print pid1, pid2;

Id= 5
pid1 = fork();
2 pid2 =fork(); pid1 = 0
pid2 =
print pid1, pid2;

Operating System Concepts – 9th Edition 2.11 Silberschatz, Galvin and Gagne ©2013
Id= 4
pid1 = fork(); pid1 = 5
pid2 = fork(); pid2 = 6
print pid1, pid2;
Id= 6
pid1 = fork();
pid1 = 5
pid2 = fork(); pid2 = 0
3 print pid1, pid2;
Id= 5
pid1 = fork();
pid2 =fork(); pid1 = 0
pid2 =
print pid1, pid2;

Operating System Concepts – 9th Edition 2.12 Silberschatz, Galvin and Gagne ©2013
Id= 4
pid1 = fork(); pid1 = 5
pid2 = fork(); pid2 = 6
print pid1, pid2;
Id= 6
pid1 = fork();
pid1 = 5
pid2 = fork(); pid2 = 0
3 print pid1, pid2;
Id= 5
pid1 = fork();
pid2 =fork(); pid1 = 0
pid2 = 7
print pid1, pid2;

Id= 7
pid1 = fork();
4 pid2 = fork(); pid1 = 0
pid2 = 0
print pid1, pid2;
Operating System Concepts – 9th Edition 2.13 Silberschatz, Galvin and Gagne ©2013
Id= 4
pid1 = fork(); pid1 = 5
pid2 = fork(); pid2 = 6
print pid1, pid2;
Id= 6
pid1 = fork();
pid1 = 5
pid2 = fork(); pid2 = 0
print pid1, pid2;
Id= 5
pid1 = fork();
pid2 =fork(); pid1 = 0
pid2 = 7 Output:
print pid1, pid2; 5 6
0 7
Id= 7
5 0
pid1 = fork(); 0 0
pid2 = fork(); pid1 = 0
pid2 = 0
print pid1, pid2;
Operating System Concepts – 9th Edition 2.14 Silberschatz, Galvin and Gagne ©2013
exec ()

 Application:
 To execute a new program
 exec() does not create a new process.

 Process id for new program = Process id for a program


that calls the exec() system call.

 If exec() is executed successfully, control will never


return to the program that calls it.

Operating System Concepts – 9th Edition 2.21 Silberschatz, Galvin and Gagne ©2013
exec()System Call

Char *path, *arg0, *arg1, …, *argn;


int ret

ret = execl(path,arg0,arg1,…,argn,(char*)0);

path – name of a file that contains the program to be executed


arg0 – program name
arg1,…,argn – parameter

Operating System Concepts – 9th Edition 2.22 Silberschatz, Galvin and Gagne ©2013
exit()

 Application: to terminate a process.


 Format:

int status;

exit(status);

status = 0 ---> normal termination


status = nonzero ---> abnormal

Operating System Concepts – 9th Edition 2.23 Silberschatz, Galvin and Gagne ©2013
Using exec()and fork()
int main()
{ int pid;
pid = fork();
if (pid>0){
wait((int*)0);
printf(“ls completed\n”);
exit(0); }
if pid == 0){
execl(“/bin/ls”, “ls”,”-l”,(char *)0); }
perror(“fork failed”);
exit(1); }

Operating System Concepts – 9th Edition 2.24 Silberschatz, Galvin and Gagne ©2013

You might also like