Home :: International :: Manuals :: Howto :: FAQ :: Man Pages :: Email Login

 
 

 

CLONE

Section: Linux Programmer's Manual (2)
Updated: 25 april 1998
Index Return to Main Contents
 

̾Á°

__clone - »Ò¥×¥í¥»¥¹¤òºîÀ®¤¹¤ë  

½ñ¼°

#include <sched.h>

int __clone(int (*fn) (void *arg), void *child_stack, int flags, void *arg)

 

ÀâÌÀ

__clone ¤Ï fork(2) ¤Î¤è¤¦¤Ë¿·¤·¤¤¥×¥í¥»¥¹¤òºîÀ®¤¹¤ë¡£ fork(2) ¤È°ã¤Ã¤Æ __clone ¤Ï»Ò¥×¥í¥»¥¹(child process)¤¬¥á¥â¥ê¶õ´Ö¡¢¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Î ¥Æ¡¼¥Ö¥ë¡¢¥·¥°¥Ê¥ë¡¦¥Ï¥ó¥É¥é¡¼¤Î¥Æ¡¼¥Ö¥ë¤Ê¤É¤Î¼Â¹Ô¥³¥ó¥Æ¥­¥¹¥È¤Î°ìÉô¤ò ¿Æ¥×¥í¥»¥¹¤È¶¦Í­¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤¹¤ë¡£ __clone ¤Î¼çÍפʻÈÍÑË¡¤Ï¥¹¥ì¥Ã¥É(threads)¤ò¼ÂÁõ¤¹¤ë¤³¤È¤Ç¤¢¤ë: °ì¤Ä¤Î¥×¥í¥°¥é¥à¤ÎÃæ¤ÎÊ£¿ô¤Î¥¹¥ì¥Ã¥É¤Ï¶¦Í­¤µ¤ì¤¿¥á¥â¥ê¶õ´Ö¤Ë ¤ª¤¤¤Æ¶¨Ä´¤·¤Æ¼Â¹Ô¤µ¤ì¤ë¡£

»Ò¥×¥í¥»¥¹¤¬ºîÀ®¤µ¤ì¤¿»þ¤Ë¡¢´Ø¿ô fn(arg) ¤¬¼Â¹Ô¤µ¤ì¤ë¡£ fn °ú¤­¿ô¤Ï»Ò¥×¥í¥»¥¹¤¬¼Â¹Ô¤ò»Ï¤á¤ë»þ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë ´Ø¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤Ç¤¢¤ë¡£ arg °ú¤­¿ô¤Ï¤½¤Î¤Þ¤Þ fn ´Ø¿ô¤Ø¤ÈÅϤµ¤ì¤ë¡£

fn(arg) ´Ø¿ôŬÍѤ«¤éÊÖ¤ë»þ¤Ë¡¢»Ò¥×¥í¥»¥¹¤Ï½ªÎ»¤¹¤ë¡£ fn ¤Ë¤è¤Ã¤ÆÊÖ¤µ¤ì¤¿À°¿ô¤Ï»Ò¥×¥í¥»¥¹¤Î½ªÎ»¥³¡¼¥É¤È¤Ê¤ë¡£ »Ò¥×¥í¥»¥¹¤ÏÌÀ¼¨Åª¤Ë exit(1) ¤ò¸Æ¤ó¤À¤ê¡¢Ã×̿Ū¤Ê¥·¥°¥Ê¥ë¤ò¼õ¤±¤¿¾ì¹ç¤Ë¤â½ªÎ»¤¹¤ë¡£

child_stack °ú¤­¿ô¤Ï»Ò¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ»ÈÍѤµ¤ì¤ë¥¹¥¿¥Ã¥¯¤Î°ÌÃÖ¤ò»ØÄꤹ¤ë¡£ »Ò¥×¥í¥»¥¹¤È¿Æ¥×¥í¥»¥¹¤Ï¥á¥â¥ê¤ò¶¦Í­¤¹¤ë¤¿¤á¡¢°ìÈÌ¤Ë»Ò¥×¥í¥»¥¹¤Ï ¿Æ¥×¥í¥»¥¹¤ÈƱ¤¸¥¹¥¿¥Ã¥¯¤Ç¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£ ¤³¤Î¤¿¤á¿Æ¥×¥í¥»¥¹¤Ï»Ò¥×¥í¥»¥¹¤Î¥¹¥¿¥Ã¥¯¤Î¤¿¤á¤Î¥á¥â¥ê¶õ´Ö¤òÀßÄê ¤·¤Æ¡¢¤³¤Î¶õ´Ö¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤ò __clone ¤ØÅϤµ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ Linux ¤¬Áö¤Ã¤Æ¤¤¤ë(HP PA ¥×¥í¥»¥Ã¥µ¡¼¤ò½ü¤¯)Á´¤Æ¤Î¥×¥í¥»¥Ã¥µ¤Ç¤Ï ¥¹¥¿¥Ã¥¯¤Ï²¼Êý¤Ø¤ÈÀ®Ä¹¤¹¤ë¡£¤½¤ì¤Ç child_stack ¤ÏÂçÄñ¡¢»Ò¥×¥í¥»¥¹¤Î¥¹¥¿¥Ã¥¯¤Î¤¿¤á¤ËÀßÄꤷ¤¿¥á¥â¥ê¶õ´Ö¤Î°ìÈÖÂ礭¤¤ ¥¢¥É¥ì¥¹¤Ø¤Î¥Ý¥¤¥ó¥¿¡¼¤Ç¤¢¤ë¡£

flags ¤Î²¼°Ì¥Ð¥¤¥È¤Ï»Ò¥×¥í¥»¥¹¤¬»à¤ó¤À¾ì¹ç¤Ë¿Æ¥×¥í¥»¥¹¤Ø¤ÈÁ÷¤é¤ì¤ë ¥·¥°¥Ê¥ëÈÖ¹æ¤ò»ØÄꤹ¤ë¡£ flags ¤Ï¤µ¤é¤Ë°Ê²¼¤ÎÆâÍÆ¤Î¤¤¤¯¤Ä¤«¤Î¥Ó¥Ã¥È OR(bitwise-or)¤Ç¡¢ ¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹¤Î´Ö¤Ç²¿¤ò¶¦Í­¤¹¤ë¤«¤ò»ØÄꤹ¤ë¤¿¤á¤Ë»ÈÍѤ¹¤ë¡£

CLONE_VM
CLONE_VM ¤¬ÀßÄꤵ¤ì¤¿¾ì¹ç¡¢¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹¤ÏƱ¤¸¥á¥â¥ê¶õ´Ö¤Ç¼Â¹Ô¤µ¤ì¤ë¡£ ÆÃ¤Ë¿Æ¥×¥í¥»¥¹¤ä»Ò¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¥á¥â¥ê¤Ë½ñ¤­¹þ¤Þ¤ì¤¿ÆâÍÆ¤Ï¾¤Î¥×¥í¥»¥¹ ¤Ë¤è¤Ã¤Æ¤â¸«¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¤µ¤é¤Ë¡¢ »Ò¥×¥í¥»¥¹¤ä¿Æ¥×¥í¥»¥¹¤¬ mmap(2) ¤ä munmap(2) ¤ò»È¤Ã¤Æ¥á¥â¥ê¤ò¥Þ¥Ã¥×¤·¤¿¤ê¥¢¥ó¥Þ¥Ã¥×¤·¤¿¾ì¹ç¡¢ ¤½¤ì¤Ï¾¤Î¥×¥í¥»¥¹¤Ø¤â±Æ¶Á¤¹¤ë¡£

CLONE_VM ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢»Ò¥×¥í¥»¥¹¤Ï __clone ¤¬¼Â¹Ô¤µ¤ì¤¿»þÅÀ¤Ç¤Î¿Æ¥×¥í¥»¥¹¤Î¥á¥â¥ê¶õ´Ö¤ò¥³¥Ô¡¼¤·¤¿ Ê̤Υá¥â¥ê¶õ´Ö¤Ç¼Â¹Ô¤µ¤ì¤ë¡£ ¤¢¤ë¥×¥í¥»¥¹¤Ç¹Ô¤Ê¤ï¤ì¤¿¥á¥â¥ê¤Ø¤Î½ñ¤­¹þ¤ß¡¢ ¥Õ¥¡¥¤¥ë¤Î¥Þ¥Ã¥×/¥¢¥ó¥Þ¥Ã¥×¤Ï fork(2) ¤Î¾ì¹ç¤ÈƱÍÍ¡¢Â¾¤Ë¤Ï±Æ¶Á¤·¤Ê¤¤¡£

CLONE_FS
CLONE_FS ¤¬ÀßÄꤵ¤ì¤¿¾ì¹ç¡¢¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹¤¬Æ±¤¸¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¾ðÊó¤ò ¶¦Í­¤¹¤ë¡£¤³¤ì¤Ë¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥ë¡¼¥È(root)¤ä¸½ºß¤Î ¥ï¡¼¥­¥ó¥°¡¦¥Ç¥£¥ì¥¯¥È¥ê(current working directory)¤ä umask ¤¬´Þ¤Þ¤ì¤ë¡£ ¿Æ¥×¥í¥»¥¹¤ä»Ò¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤ï¤ì¤¿Á´¤Æ¤Î chroot(2), chdir(2), umask(2) ¤Ï¾¤Î¥×¥í¥»¥¹¤Ë¤â±Æ¶Á¤¹¤ë¡£

CLONE_FS ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢»Ò¥×¥í¥»¥¹¤Ï __clone ¤¬¼Â¹Ô¤µ¤ì¤¿»þÅÀ¤Ç¤Î¿Æ¥×¥í¥»¥¹¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¾ðÊó¤Î¥³¥Ô¡¼¤ò »ÈÍѤ¹¤ë¡£ ¤½¤ì°Ê¸å¡¢¤¢¤ë¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤ï¤ì¤¿ chroot(2), chdir(2), umask(2) ¥³¡¼¥ë¤Ï¾¤Ë¤Ï±Æ¶Á¤·¤Ê¤¤¡£

CLONE_FILES
CLONE_FILES ¤¬ÀßÄꤵ¤ì¤¿¾ì¹ç¡¢¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹¤Ï¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Î ¥Æ¡¼¥Ö¥ë¤ò¶¦Í­¤¹¤ë¡£¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Ï»Ò¥×¥í¥»¥¹¤È¿Æ¥×¥í¥»¥¹ ¤Ë¤ª¤¤¤Æ¾ï¤ËƱ¤¸¥Õ¥¡¥¤¥ë¤ò»²¾È¤¹¤ë¡£¿Æ¥×¥í¥»¥¹¤ä»Ò¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ ºîÀ®¤µ¤ì¤¿Á´¤Æ¤Î¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Ï¾¤Î¥×¥í¥»¥¹¤Ë¤ª¤¤¤Æ¤â Í­¸ú¤Ç¤¢¤ë¡£Æ±Íͤˡ¢¤¢¤ë¥×¥í¥»¥¹¤¬¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Î ¥¯¥í¡¼¥º(close)¤ä¡¢ÀßÄꤵ¤ì¤¿¥Õ¥é¥°¤ÎÊѹ¹¤ò¹Ô¤Ê¤Ã¤¿¾ì¹ç¤Ï¾¤Î¥×¥í¥»¥¹¤Ë ¤â±Æ¶Á¤¹¤ë¡£

CLONE_FILES ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢»Ò¥×¥í¥»¥¹¤Ï __clone ¤¬¼Â¹Ô¤µ¤ì¤¿»þÅÀ¤Ç¤Î¿Æ¥×¥í¥»¥¹¤¬¥ª¡¼¥×¥ó(open)¤·¤Æ¤¤¤ëÁ´¤Æ¤Î ¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Î¥³¥Ô¡¼¤ò·Ñ¾µ¤¹¤ë¡£ ¤½¤ì°Ê¸å¡¢¤¢¤ë¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤ï¤ì¤¿¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼¤Ë ÂФ·¤Æ¹Ô¤Ê¤ï¤ì¤¿Áàºî¤Ï¾¤Ë¤Ï±Æ¶Á¤·¤Ê¤¤¡£

CLONE_SIGHAND
CLONE_SIGHAND ¤¬ÀßÄꤵ¤ì¤¿¾ì¹ç¡¢¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹¤ÏƱ¤¸¥·¥°¥Ê¥ë¡¦¥Ï¥ó¥É¥é¡¼¤Î ¥Æ¡¼¥Ö¥ë¤ò¶¦Í­¤¹¤ë¡£¿Æ¥×¥í¥»¥¹¤Þ¤¿¤Ï»Ò¥×¥í¥»¥¹¤¬ sigaction(2) ¥³¡¼¥ë¤·¤Æ¡¢¥·¥°¥Ê¥ë¤Ë´ØÏ¢¤Å¤±¤é¤ì¤¿Æ°ºî¤òÊѹ¹¤·¤¿¾ì¹ç¡¢Æ±ÍÍ¤Ë Â¾¤Î¥×¥í¥»¥¹¤Îưºî¤âÊѹ¹¤µ¤ì¤ë¡£°ìÊý¤Ç¡¢¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹¤Ï ¸ÄÊ̤Υ·¥°¥Ê¥ë¡¦¥Þ¥¹¥¯(signal mask)¤È²ò·èÃæ¤Î¥·¥°¥Ê¥ë¤Î½¸¹ç¤ò»ý¤Ã¤Æ¤¤¤ë¡£ ¤½¤ì¤Ç¡¢¥×¥í¥»¥¹¤Ï¾¤Î¥×¥í¥»¥¹¤Ë±Æ¶Á¤òÍ¿¤¨¤ë¤³¤È¤Ê¤·¤Ë sigprocmask(2) ¤ò»ÈÍѤ·¤Æ¥·¥°¥Ê¥ë¤ò¶Ø»ß(block)¤·¤¿¤êµö²Ä(unblock)¤·¤¿¤ê¤Ç¤­¤ë¡£

CLONE_SIGHAND ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢»Ò¥×¥í¥»¥¹¤Ï __clone ¤¬¥³¡¼¥ë¤µ¤ì¤¿»þÅÀ¤Ç¤Î¿Æ¥×¥í¥»¥¹¤Î¥·¥°¥Ê¥ë¡¦¥Ï¥ó¥É¥é¡¼¤Î¥³¥Ô¡¼¤ò·Ñ¾µ¤¹¤ë¡£ ¤½¤ì°Ê¸å¡¢¤¢¤ë¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤ï¤ì¤¿ sigaction(2) ¥³¡¼¥ë¤Ï¾¤Î¥×¥í¥»¥¹¤Ë¤Ï±Æ¶Á¤·¤Ê¤¤¡£

CLONE_PID
CLONE_PID ¤¬ÀßÄꤵ¤ì¤¿¾ì¹ç¡¢»Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤ÈƱ¤¸¥×¥í¥»¥¹ ID ¤ÇºîÀ®¤µ¤ì¤ë¡£

CLONE_PID ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢»Ò¥×¥í¥»¥¹¤ÏÆÈΩ¤·¤¿¥×¥í¥»¥¹ ID ¤ò»ý¤Á¡¢ ¿Æ¥×¥í¥»¥¹¤È¤Ï¶èÊ̤µ¤ì¤ë¡£

 

ÊÖ¤êÃÍ

À®¸ù¤·¤¿¾ì¹ç¡¢¿Æ¤Î¼Â¹Ô¥¹¥ì¥Ã¥É¤Ë¤Ï»Ò¥×¥í¥»¥¹¤Î PID ¤¬ÊÖ¤µ¤ì¤ë¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¡¢ ¿Æ¤Î¥³¥ó¥Æ¥­¥¹¥È¤Ë¤Ï -1 ¤¬ÊÖ¤µ¤ì»Ò¥×¥í¥»¥¹¤ÏºîÀ®¤µ¤ì¤Ê¤¤¡£ ¤µ¤é¤Ë errno ¤¬Å¬ÀÚ¤ËÀßÄꤵ¤ì¤ë¡£

 

¥¨¥é¡¼

EAGAIN
¤¹¤Ç¤ËÁö¤Ã¤Æ¤¤¤ë¥×¥í¥»¥¹¤¬Â¿²á¤®¤ë¡£
ENOMEM
__clone »Ò¥×¥í¥»¥¹¤Î¤¿¤á¤Ë³ÎÊݤ¹¤Ù¤­¥¿¥¹¥¯¹½Â¤ÂΤ䡢¿Æ¤Î¥³¥ó¥Æ¥­¥¹¥È¤Î °ìÉô¤ò¤ò¥³¥Ô¡¼¤¹¤ë¤Î¤ËɬÍפʥá¥â¥ê¤ò³ä¤êÅö¤Æ¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£

 

¥Ð¥°

¥«¡¼¥Í¥ë¤Î¥Ð¡¼¥¸¥ç¥ó 2.1.97 ¤Ç¤Ï¡¢ CLONE_PID ¥Õ¥é¥°¤ò»ÈÍѤ·¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¥«¡¼¥Í¥ë¤Î¾¤ÎÉôʬ¤ä¿¤¯¤Î ¥·¥¹¥Æ¥à¡¦¥½¥Õ¥È¥¦¥§¥¢¤¬¥×¥í¥»¥¹ ID ¤Ë¤Ï½ÅÊ£¤¬¤Ê¤¤¤³¤È¤ò ²¾Äꤷ¤Æ¤¤¤ë¤¿¤á¤Ë¤Ç¤¢¤ë¡£

libc version 5 ¤Ë¤Ï __clone ¤Î¤¿¤á¤Î¥¨¥ó¥È¥ê¤¬Â¸ºß¤·¤Ê¤¤¡£libc 6 (¤Þ¤¿¤Î̾¤ò glibc2)¤Ë¤Ï ¤³¤Î¥Þ¥Ë¥å¥¢¥ë¡¦¥Ú¡¼¥¸¤Ëµ­½Ò¤·¤Æ¤¢¤ë __clone ¤òÄ󶡤¹¤ë¡£

 

½àµò

__clone ¥³¡¼¥ë¤Ï Linux ÆÃÍ­¤Ç¤¢¤ê¡¢°Ü¿¢À­¤¬É¬Í×¤Ê¥×¥í¥°¥é¥à¤Ç¤Ï»ÈÍѤ·¤Æ¤Ï ¤Ê¤é¤Ê¤¤¡£¥¹¥ì¥Ã¥É¤ò»ÈÍѤ·¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥×¥í¥°¥é¥ß¥°¤Ë¤Ï (glibc2 ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë) LinuxThreads ¥é¥¤¥Ö¥é¥ê¤Î¤è¤¦¤Ê¡¢ POSIX 1003.1c thread API ¤ò¼ÂÁõ¤·¤¿¥é¥¤¥Ö¥é¥ê¤ò»ÈÍѤ·¤¿Êý¤¬Îɤ¤¡£ pthread_create(3thr) ¤ò»²¾È¤¹¤ë¤³¤È¡£

¤³¥Þ¥Ë¥å¥¢¥ë¡¦¥Ú¡¼¥¸¤Ï¥«¡¼¥Í¥ë 2.0.x ¤È 2.1.x ¤ª¤è¤Ó glibc 2.0.x ¤Ë Âбþ¤·¤Æ¤¤¤ë¡£

 

´ØÏ¢¹àÌÜ

fork(2), pthread_create(3thr)


 

Index

̾Á°
½ñ¼°
ÀâÌÀ
ÊÖ¤êÃÍ
¥¨¥é¡¼
¥Ð¥°
½àµò
´ØÏ¢¹àÌÜ

 
 
 
 
Google
  Web Linuxinfor   
 

Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account

Document on this page is part of "Linuxinfor Man Pages in HTML Format: man2". See Index Page for more info about Authorship and Copyright.

1999-2008 Linuxinfor.com. No rights reserved.