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.
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.