2014-09-23 10 views
6
#include <sys/types.h> 
#include <stdio.h> 
#include <unistd.h> 

int main(){ 
pid_t pid; 
pid = fork(); 
if(pid<0){ 
    fprintf(stderr, "fork failed"); 
    return 1; } 
else if(pid == 0){ 
    execlp("bin/ls", "ls", NULL);} 
else{ 
    wait(NULL); 
    printf("child complete\n"); 
    } 
return 0; 
} 

Qui, per quanto ho potuto capire, si crea un processo figlio e sin dalla sua pid restituito da forcella è "0", si entra nel blocco contenente execlp e lo esegue, e poi il genitore aspetta fino a quando le uscite del bambino e quindi stampa "child complete". Per favore correggimi se sbaglio. Ma non ho capito come funziona execlp() qui. Qualcuno può spiegarlo?come funziona la chiamata di sistema execlp()?

risposta

13

fork crea un nuovo processo, viene chiamato una volta dal genitore ma restituisce due volte nel genitore e nel figlio.

Nel processo figlio la chiamata execlp esegue il comando specificato ls.

Questo sostituisce il processo figlio con il nuovo file di programma (file di programma ls) che significa seguire.

Quando un processo chiama la execlp o uno degli altri 7 exec funzioni, tale processo è completamente sostituito dal nuovo programma, e il nuovo programma inizia l'esecuzione alla sua funzione principale .

L'ID di processo non cambia in uno exec, perché un nuovo processo non è creato. exec sostituisce semplicemente il testo del processo corrente, i dati, l'heap e impila i segmenti con un nuovo programma dal disco.

La combinazione di fork seguita da exec è denominata spawning a new process in alcuni sistemi operativi.

Speriamo che fosse più o meno chiaro. Fammi sapere se hai altre domande.

+0

Grazie per una risposta gentile e utile. :) – Nikhil

0

La famiglia di funzioni exec() sostituisce l'immagine di processo corrente con una nuova immagine di processo.