CLONE(2)

NOMBRE
clone - crea un descendiente del proceso

SINOPSIS
#include <linux/sched.h>
#include <linux/unistd.h>

pid_t clone(void *sp, unsigned long flags)

DESCRIPCIÓN
clone es un interfase alternativo a fork, con más opciones. fork es equivalente a clone(0, SIGCLD|COPYVM). Si sp no es cero, el proceso descendiente usa sp como su puntero pila inicial (initial stack pointer). El byte bajo de flags contiene la señal enviada al ascendiente cuando el descendiente muere. flags también puede estar or-operado (bitwise or) con COPYVM ó/y COPYFD. Si COPYVM está asignado, las páginas del descendiente son imágenes copias-en-escritura de las páginas del ascendiente. Si COPYVM no está asignado, el proceso descendiente comparte las mismas páginas con su ascendiente, y ambos pueden escribir en el mismo dato. Si COPYFD está asignado, los descriptores de fichero del descendiente son copia de los relativos a su ancestor. Si COPYFD no está asignado, los descriptores de ficheros del descendiente y ascendiente se comparten.

VALOR REGRESADO
En caso de éxito, el PID del descendiente regresa en el hilo de ejecución del ascendiente, y un 0 vuelve en el hilo de ejecución del descendiente. En caso de fallo, un -1 será vuelto en el contexto del ascendiente, no se creará ningún proceso descendiente, y la variable errno será asignada apropiadamente.

ERRORES

ENOSYS
    clone siempre regresará este error a menos que su kernel halla sido compilado con CLONE_ACTUALLY_WORKS_OK definido.

EAGAIN
    fork no puede distribuir suficiente memoria para copiar las tablas de páginas del ascendiente y asignar una estructura de tarea (task structure) para el descendiente.

BUGS
Normalmente CLONE_ACTUALLY_WORKS_OK no está definido.
No hay una entrada para clone en /lib/libc.so.4.5.26.
Comentarios en el kernel (hasta 1.1.46) indican que este no sabe tratar el caso en el que COPYVM no está definido.

VÉASE
fork(2)