Clone (chiamata di sistema Linux)

clone() è una chiamata di sistema del kernel Linux che replica il processo che la invoca, permettendogli di condividere con il nuovo processo parte del suo contesto d'esecuzione. Il costrutto, simile alla fork() dei sistemi operativi della UNIX compatibili, che invece duplica processi per intero, è solitamente utilizzato per realizzare concorrenza a livello di thread, anziché di processo, sebbene per tali scopi spesso siano preferite alternative a più alto livello, come i POSIX Threads.

Funzionamento

[modifica | modifica wikitesto]

La sintassi per chiamare clone all'interno di un programma in ambiente Linux è:

#include <sched.h>
int clone (int (*fn) (void *), void *child_stack, int flags, void *arg);

clone avvia un nuovo thread che inizia con la funzione referenziata dall'argomento fn argument (laddove il comando fork() prosegue con l'istruzione immediatamente successiva al fork(). L'argomento child_stack è un puntatore allo spazio di memoria da usare come stack del nuovo thread (che dovrà essere stato creato tramite malloc; in quasi tutte le architetture lo stack 'cresce' verso il basso, per cui il puntatore dovrà puntare alla fine dello spazio a disposizione, flags specifica quali parti del processo sono ereditate dal processo genitore e arg è l'argomento passato alla funzione. Il valore di ritorno è l'ID del processo figlio, oppure -1 in caso di errore.

Voci correlate

[modifica | modifica wikitesto]
  Portale Software libero: accedi alle voci di Wikipedia che trattano di software libero