In Linux tutto quello che non è un file è un processo. Un nuovo processo viene creato perchè un processo già esistente crea una copia esatta di se stesso. Questo processo figlio (child) ha lo stesso ambiente del suo genitore e differisce solo per il diverso numero di process ID (PID). Tale procedura è detta forking (biforcazione).
Dopo il processo di biforcazione, lo spazio di indirizzo del processo figlio viene sovrascritto con i dati del nuovo processo: ciò si fa con una chiamata exec al sistema. Poi il meccanismo fork-and-exec scambia un vecchio comando con uno nuovo mentre l'ambiente in cui il nuovo programma viene eseguito rimane lo stesso. Tale meccanismo è impiegato in tutti i sistemi UNIX, anche il primo processo init, con ID di processo pari a 1, viene sdoppiato (fork) durante la procedura di avvio.
Molti programmi demonizzano i loro processi figlio, in modo che possono mantenersi attivi anche quando il genitore si ferma o viene fermato. In casi eccezionali un processo potrebbe finire mentre quello genitore non si aspetta il suo completamento. Cosi un processo "insepolto" è detto processo zombie
Nessun commento:
Posta un commento