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

Systemcalls Processes

This document provides an overview of system calls and process management in Linux. It discusses the fork(), exec(), wait(), and exit() system calls used to create and manage processes. fork() creates a new process, exec() loads a new program into a process, wait() pauses a parent process until a child exits, and exit() terminates a process. Combined, these system calls allow processes to spawn child processes, run new programs, and synchronize and clean up after process termination.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views

Systemcalls Processes

This document provides an overview of system calls and process management in Linux. It discusses the fork(), exec(), wait(), and exit() system calls used to create and manage processes. fork() creates a new process, exec() loads a new program into a process, wait() pauses a parent process until a child exits, and exit() terminates a process. Combined, these system calls allow processes to spawn child processes, run new programs, and synchronize and clean up after process termination.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

Brief Introduction to System

Calls and Process


Management
COMP 229, 346, 444, 5201
Revision 1.3
July 21, 2004

March 1, Serguei A. Mokhov, 1


Overview
• System Call Interface
• Process Management with C
– fork()
– exec()
– wait()
– exit()

March 1, Serguei A. Mokhov, 2


System Call Interface
App Software
User-run
API ning
syscall - trap
Sys Software
“You are here” Kernel-ru exit()
Sys Call (OS) Interface
Zombie
nning
read(), write(),
OS wait(), sleep()

Sw-Hw I-face (drivers) Block


Ready
ed
Hardware

March 1, Serguei A. Mokhov, 3


The fork() System Call (1)
• A process calling fork() spawns a child
process.
• The child is almost an identical clone of the
parent:
– Program Text (segment .text)
– Stack (ss) #include <sys/types.h>
– PCB (eg. registers) #include <unistd.h>

– Data (segment .data) pid_t fork(void);

March 1, Serguei A. Mokhov, 4


The fork() System Call (2)
• The fork() is one of the those system calls,
which is called once, but returns twice!
• After fork() both the parent and the child are
executing the same program. Consider a piece of program
(see fork_pid.c example):
• On error, fork() returns -1 ...
pid_t pid = fork();
PID=28 PID=28 PID=34 printf(“PID: %d\n”, pid);
...
fork()
The parent will print:
PID: 34
p1 p1 c1 And the child will always print:
PID: 0

March 1, Serguei A. Mokhov, 5


The fork() System Call (3)
• Remember, after fork() the execution
order is not guaranteed.
• Simple fork() examples:
– fork_pid.c prints
out return from fork()
– fork_child.c distinguishes between the parent
and the child

March 1, Serguei A. Mokhov, 6


The exec()System Call (1)
• The exec() call replaces a current process’ image with a new one
(i.e. loads a new program within current process).
• The new image is either regular executable binary file or a shell script.
• There’s no a syscall under the name exec(). By exec() we usually
refer to a family of calls:
– int execl(char *path, char *arg, ...);
– int execv(char *path, char *argv[]);
– int execle(char *path, char *arg, ..., char *envp[]);
– int execve(char *path, char *argv[], char *envp[]);
– int execlp(char *file, char *arg, ...);
– int execvp(char *file, char *argv[]);
• Here's what l, v, e, and p mean:
– l means an argument list,
– v means an argument vector,
– e means an environment vector, and
– p means a search path.

March 1, Serguei A. Mokhov, 7


The exec()System Call (2)
• Upon success, exec() never returns to the caller. If it does return, it
means the call failed. Typical reasons are: non-existent file (bad path)
or bad permissions.
• Arguments passed via exec() appear in the argv[] of the main()
function.
• For more info: man 3 exec;
• Example: exec_pid.c
PID=28 PID=28

exec()

p1 p1
Old
Legend: Program
New
Program

March 1, Serguei A. Mokhov, 8


Environment
• The e-exec calls use the environment when attempt to invoke a new
program.
• Name = Value
– HOME
– PATH
– SHELL
– USER
– LOGNAME
– ...
• set or env - will display current environment, which you can modify
with:
– the export command in a shell or a shell script (bash);
– the setenv for tcsh
– the getenv(), setenv(), putenv(), etc. in C

March 1, Serguei A. Mokhov, 9


fork() and exec() Combined
• Often after doing fork() we want to load
a new program into the child. E.g.: a shell.
tcsh tcsh tcsh
PID=28 PID=28 PID=34
fork()

p1 p1 c1
tcsh ls
PID=34 PID=34

exec(ls)

c1 c1
March 1, Serguei A. Mokhov, 10
The System wait() Call
• Forces the parent to suspend execution, i.e.
wait for its children or a specific child to die
(terminate is more appropriate terminology,
but a bit less common).
• Example: fork_exec.c

March 1, Serguei A. Mokhov, 11


The System wait() Call (2)
#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status);


pid_t waitpid(pid_t pid, int *status, int options);

• The wait() causes the parent to wait for any child process.
• The waitpid() waits for the child with specific PID.
• The status, if not NULL, stores exit information of the child,
which can be analyzed by the parent using the W*() macros.
• The return value is:
– PID of the exited process, if no error
– (-1) if an error has happened

March 1, Serguei A. Mokhov, 12


The exit() System Call
#include <stdlib.h>

void exit(int status);

• This call gracefully terminates process execution. Gracefully


means it does clean up and release of resources, and puts the
process into the zombie state.
• By calling wait(), the parent cleans up all its zombie children.
• exit() specifies a return value from the program, which a
parent process might want to examine as well as status of the
dead process.
• _exit() call is another possibility of quick death without
cleanup.
March 1, Serguei A. Mokhov, 13
Process Overview
INIT
PID=1
User-run
ning
syscall() - trap

Kernel-ru exit()
Zombie
nning
wait() ?
Block
Ready
ed

March 1, Serguei A. Mokhov, 14


References
• man 2 fork
• man 3 exec
• man 2 wait
• man 3 exit

March 1, Serguei A. Mokhov, 15

You might also like