11.04.2013 Views

Processo figlio

Processo figlio

Processo figlio

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!