You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
user<br />
mode<br />
running<br />
<br />
kernel<br />
mode<br />
running<br />
exited zombie<br />
preempted<br />
Uscita<br />
ready<br />
sleeping in<br />
memory<br />
new<br />
Ingresso<br />
ready<br />
swapped out<br />
sleeping<br />
swapped out
user<br />
mode<br />
running<br />
<br />
kernel<br />
mode<br />
running<br />
exited zombie<br />
preempted<br />
Uscita<br />
ready<br />
sleeping in<br />
memory<br />
new<br />
Ingresso<br />
ready<br />
swapped out<br />
sleeping<br />
swapped out
user<br />
mode<br />
running<br />
<br />
kernel<br />
mode<br />
running<br />
exited zombie<br />
preempted<br />
Uscita<br />
ready<br />
sleeping in<br />
memory<br />
new<br />
Ingresso<br />
ready<br />
swapped out<br />
sleeping<br />
swapped out
user<br />
mode<br />
running<br />
<br />
kernel<br />
mode<br />
running<br />
exited zombie<br />
preempted<br />
Uscita<br />
ready<br />
sleeping in<br />
memory<br />
new<br />
Ingresso<br />
ready<br />
swapped out<br />
sleeping<br />
swapped out
user<br />
mode<br />
running<br />
<br />
kernel<br />
mode<br />
running<br />
exited zombie<br />
preempted<br />
Uscita<br />
ready<br />
sleeping in<br />
memory<br />
new<br />
Ingresso<br />
ready<br />
swapped out<br />
sleeping<br />
swapped out
Kernel<br />
PID=0<br />
init<br />
PID=1<br />
Legge<br />
/etc/inittab<br />
<br />
<br />
<br />
<br />
<br />
getty login shell<br />
getty login shell<br />
getty login shell<br />
Legge<br />
/etc/passwd
Kernel<br />
PID=0<br />
init<br />
PID=1<br />
Legge<br />
/etc/inittab<br />
<br />
<br />
<br />
<br />
<br />
getty login shell<br />
getty login shell<br />
getty login shell<br />
Legge<br />
/etc/passwd
Page<br />
daemon<br />
BASH<br />
Kernel<br />
Swapper Init<br />
Getty
Page<br />
daemon<br />
BASH<br />
Kernel<br />
Swapper Init<br />
Getty
Page<br />
daemon<br />
BASH<br />
Kernel<br />
Swapper Init<br />
Getty
pid_t fork(void)
<strong>Processo</strong> padre<br />
stack<br />
heap<br />
dati<br />
testo<br />
<br />
fork()<br />
Entrambi i processi ripartono<br />
dall'istruzione successiva alla<br />
fork() nel testo<br />
<strong>Processo</strong> <strong>figlio</strong><br />
stack<br />
heap<br />
dati<br />
testo
find . -name '*.c' -print |<br />
wc -l<br />
<br />
<br />
<br />
<br />
<br />
fork()<br />
exec()<br />
shell<br />
pipe()<br />
fork()<br />
exec()<br />
input<br />
richieste<br />
find wc<br />
fork()<br />
Child<br />
process<br />
Server<br />
process<br />
fork()<br />
Child<br />
process<br />
risposta risposta<br />
output
find . -name '*.c' -print |<br />
wc -l<br />
<br />
<br />
<br />
<br />
<br />
fork()<br />
exec()<br />
shell<br />
pipe()<br />
fork()<br />
exec()<br />
input<br />
richieste<br />
find wc<br />
fork()<br />
Child<br />
process<br />
Server<br />
process<br />
fork()<br />
Child<br />
process<br />
risposta risposta<br />
output
find . -name '*.c' -print |<br />
wc -l<br />
<br />
<br />
<br />
<br />
<br />
fork()<br />
exec()<br />
shell<br />
pipe()<br />
fork()<br />
exec()<br />
input<br />
richieste<br />
find wc<br />
fork()<br />
Child<br />
process<br />
Server<br />
process<br />
fork()<br />
Child<br />
process<br />
risposta risposta<br />
output
omb<br />
bomb ... bomb<br />
bomb<br />
bomb ... bomb<br />
...<br />
bomb<br />
bomb ... bomb<br />
... ... ... ...
while ( 1 ) {<br />
}<br />
x=malloc(1048576); /* 1MB */<br />
*x = 0;/* forza il Copy On Write */<br />
fork();
ulimit -u numero<br />
<br />
<br />
kill -9 -1
ulimit -u numero<br />
<br />
<br />
kill -9 -1
pid_t getpid(void)<br />
<br />
<br />
<br />
pid_t getppid(void)
pgrep<br />
pgrep stringa<br />
<br />
<br />
pgrep init
pgrep<br />
pgrep stringa<br />
<br />
<br />
pgrep init
pgrep<br />
pgrep stringa<br />
<br />
<br />
pgrep init
void exit(int status)
void exit(int status)
void exit(int status)
void exit(int status)
kill<br />
kill -l
kill<br />
kill -l
kill<br />
kill -l
kill<br />
<br />
kill -id segnale pid<br />
kill -9 8732<br />
<br />
pkill<br />
<br />
pkill -KILL program
int kill(pid_t pid, int sig)
void sig_handler(int signo)<br />
<br />
sighandler_t<br />
<br />
<br />
typedef void (*sighandler_t) (int);
sighandler_t signal(int signo,<br />
sighandler_t handler)
sighandler_t signal(int signo,<br />
sighandler_t handler)
pid_t wait(int *status)
man wait
padre<br />
PID<br />
Tabella<br />
processi<br />
fork()<br />
PID<br />
Running<br />
<strong>figlio</strong><br />
Running
<strong>figlio</strong><br />
padre<br />
wait()<br />
Tabella<br />
processi<br />
Blocked<br />
Running
<strong>figlio</strong><br />
padre<br />
wait()<br />
Tabella<br />
processi<br />
Running<br />
Zombie
padre<br />
wait()<br />
PID,<br />
codice<br />
uscita<br />
Tabella<br />
processi<br />
Running<br />
Zombie
padre<br />
PID<br />
Tabella<br />
processi<br />
fork()<br />
PID<br />
Running<br />
<strong>figlio</strong><br />
Running
<strong>figlio</strong><br />
padre<br />
Tabella<br />
processi<br />
Running<br />
Zombie
padre<br />
wait()<br />
PID,<br />
codice<br />
uscita<br />
Tabella<br />
processi<br />
Running<br />
Zombie
padre<br />
PID<br />
Tabella<br />
processi<br />
fork()<br />
PID<br />
Running<br />
<strong>figlio</strong><br />
Running
<strong>figlio</strong><br />
padre<br />
Tabella<br />
processi<br />
Running<br />
Zombie
padre<br />
<br />
Tabella<br />
processi<br />
Exiting<br />
Zombie
pid_t waitpid(pid_t pid, int *status, int<br />
options)
pid_t waitpid(pid_t pid, int *status, int<br />
options)
pid_t waitpid(pid_t pid, int *status, int<br />
options)
Spazio indirizzamento<br />
processo (RAM)<br />
Pagina 1<br />
Pagina 2<br />
...<br />
Pagina n<br />
Memoria secondaria<br />
(periferica)<br />
Blocco<br />
1<br />
Blocco<br />
n<br />
Blocco<br />
2
CPU<br />
<br />
Spazio indirizzamento<br />
processo (RAM)<br />
Pagina 1<br />
Pagina 2<br />
...<br />
Pagina n<br />
Sostituzione di codice:<br />
le pagine vengono<br />
sostituite quando richieste<br />
dal processore.<br />
Memoria secondaria<br />
(periferica)<br />
Blocco<br />
1<br />
Blocco<br />
n<br />
Blocco<br />
2
CPU<br />
<br />
Spazio indirizzamento<br />
processo (RAM)<br />
Pagina 1<br />
Pagina 2<br />
...<br />
Pagina n<br />
Sostituzione di codice:<br />
le pagine vengono<br />
sostituite quando richieste<br />
dal processore.<br />
Memoria secondaria<br />
(periferica)<br />
Blocco<br />
1<br />
Blocco<br />
n<br />
Blocco<br />
2
int execlp(const char *file, const char<br />
*arg, ...);<br />
int execle(const char *file, const char<br />
*arg, ..., char * const envp[]);<br />
int execv(const char *file, const char<br />
*argv[]);<br />
int execvp(const char *file, const char<br />
*argv[]);<br />
int execle(const char *file, const char<br />
*arg[], char * const envp[]);
in/sh -c comando
int system(const char *command)<br />
<br />
/bin/sh -c comando
int system(const char *command)<br />
<br />
/bin/sh -c comando