Le principali system call per la gestione dei processi consentono di:
Un processo figlio
forkLa funzione fork crea un processo figlio identico al processo padre, che è una copia identica del padre all'istante del fork. Viene duplicato il segmento codice, il segmento dati e il segmento di sistema. L'unica differenza tra figlio e padre è il valore restituito dalla fork:
pid_t fork(void)
exitLa funzione exit termina il processo corrente. Si può restituire al padre il codice di terminazione. Se il processo che termina non ha più processo padre il valore viene restituito all'interprete comandi del SO.
void exit(int)
getpidLa funzione getpid consente ad un processo di conoscere il valore del proprio PID.
pid_t getpid(void)
waitLa funzione wait sospende l'esecuzione del processo padre che la esegue ed attente la terminazione di un qualsiasi processo figlio. Se il figlio termina prima che il padre esegua la wait l'esecuzione della wait nel padre termina istantaneamente, senza sospenderlo.
Il valore restituito dalla funzione è il valore del PID del figlio terminato, mentre il parametro passato per indirizzo assume il valore del codice di terminazione del figlio.
pid_t wait(int*)
waitpidLa funzione waitpid sospende l'esecuzione del processo padre ed attende la terminazione del processo figlio di cui viene fornito il PID. Se il figlio termina prima che il padre esegua la waitpid l'esecuzione della waitpid nel padre termina istantaneamente.
Nel padre il valore restituito assume il valore del pid del figlio terminato, status assume il valore del codice di terminazione del figlio, e options specifica ulteriori opzioni.
pid_t waitpid(pid_t pid, int* status, int options)
execlLa funzione execl sostituisce il segmento codice e il segmento dati del processo corrente con il codice e i dati di un programma contenuto in un file eseguibile specificato. Il segmento di sistema non viene sostituito.
Il processo rimane lo stesso e quindi mantiene lo stesso PID.
La funzione execl passa dei parametri al programma che viene eseguito, tramite il meccanismo di passaggio dei parametri al main argc e argv. Il valore restituito è argn deve essere sempre NULL.
int execl(char* path_programma, char* arg0, char* arg1, ..., char* argn)
La sostituzione di codice non implica necessariamente la generazione di un figli, in questo caso quando il programma che è stato lanciato tramite la execl termina, termina anche il processo che lo ha lanciato.
È quindi necessario creare un nuovo processo che effettua la sostituzione di codice quando è necessario mantenere in vita il processo di partenza dopo l'esecuzione del codice sostituito.
L'esecuzione parallela di processi può essere simulata o reale. Esiste questa distinzione poiché, anche nei sistemi multiprocessore, spesso il numero di processi eccede il numero di processori, pertanto quasi sempre il parallelismo è in parte simulato.