CLONE3(2) System Programmer's Manual CLONE3(2) NAME clone3 - create a child process SYNOPSIS #include <clone.h> int clone3(pid_t parent, pid_t co_parent, int (*fn)(void *), void *child_stack, int flags, void *arg, ... ); DESCRIPTION clone3() creates a new process, in a manner similar to fork(2). Unlike fork(2), these calls allow the child process to share parts of its execution context with the parent and co-parent processes, such as their home, food, and approximately half of their genetic material. The main use of clone3() is to implement offspring: sentient beings that run concurrently with the parents in a shared environment. When the child process is created with clone3(), it executes the function application fn(arg). (This differs from fork(2), where execution continues in the child from the point of the fork(2) call.) The fn argument is a pointer to a function that is called by the child process at the beginning of its execution. The arg argument is passed to the fn function. Although the parent processes may supply a suitable fn function, the child process has a mind of its own and may deviate from its execution at will. Executing clone3 will randomly select half of the genes from each parent, resulting in a selection of phenotypes according to Mendelian inheritance. By design this process increases the number of bits in the global entropy pool, making recovery of the random state impractical. The child_stack argument specifies the location of the pile of diapers used by the child process. After the child process leaves the EMBRYO state and until it acquires the CAP_POTTY capability, it may frequently dump core. The calling process must therefore set up a large store of waste disposal units and pass a pointer to this store to clone3(). After a successful core dump it is necessary for a parent to handle the condition as soon as possible. The flags parameter may be bitwise-or'ed with zero or more of the following constants, in order to specify the behavior of the system call: CLONE_XY Setting CLONE_XY indicates to the system that a child of the male gender is requested. This is only a hint to the system and may not be honored. CLONE_XX Setting CLONE_XX indicates to the system that a child of the female gender is requested. This is only a hint to the system and may not be honored. If both CLONE_XY and CLONE_XX are set, results are undefined. RETURN VALUE On completion, the thread ID of the child process is returned in both parents' thread of execution. During execution, the child process may signal an error condition by raising any of the following signals. SIGNALS HUNGRY The stomach monitor process has detected an empty condition. The parent may correct the condition by supplying food. TIRED The process has executed too many cycles and must enter sleep(3). GRUMPY The process is raising signals at full volume for unknown reasons. The parent process should attach pacifier(2) to the child process and attempt to cause it to enter sleep(3). HAPPY The process is in a suitable state for taking pictures for grandparents. CONFORMING TO Biology 101. BUGS Child process may spit-up on your new shirt; a burping cloth is recommended. EXAMPLE The following psuedo-code illustrates the intended usage: #include <clone.h> int main(int argc, char *argv[]) { pid_t ange = /* ... */ pid_t bob = /* ... */ pid_t alex; alex = clone3(ange, bob, fn, stack, CLONE_XY, NULL); sleep(86400 * 30 * 9); take_snapshot(alex); } This yields the following: Alexander Yit-Keung Copeland Born 26 June, 2010 Weight 7 lbs 12 oz SEE ALSO fork(2), futex(2), getpid(2), gettid(2), set_thread_area(2), set_tid_address(2), tkill(2), unshare(2), wait(2), capabilities(7), pthreads(7) CLONE3(2) 2010-06-26 CLONE3(2)
3 Replies to “New syscall proposal”
Comments are closed.
[Why is nobody commenting? Something important has happened and nobody seems to care! :/ ]
Congratulations and thanks for this very amusing way of informing the world of your luck. All the best wishes for your child process.
(Btw, I might be using your new syscall in a future project… 🙂 )
Thanks — and congrats to your future project as well! 🙂 I got lots of offline congrats.
The comments section of this blog tends to attract spam so lately I have taken to requiring moderation and being lazy about it. As a result it’s generally quiet around here.
Oh, and while I’m here, thanks for your work on ath5k (which actually brought me to your blog).