Rechercher une page de manuel
fork
Langue: ja
Version: 2006-09-04 (openSuse - 09/10/07)
Section: 2 (Appels système)
̾Á°
fork - »Ò¥×¥í¥»¥¹¤òÀ¸À®¤¹¤ë½ñ¼°
#include <sys/types.h>#include <unistd.h>
pid_t fork(void);
ÀâÌÀ
fork() ¤Ï¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤òÊ£À½¤·¤Æ¿·¤·¤¤¥×¥í¥»¥¹¤òÀ¸À®¤¹¤ë¡£ child ¤Ç»²¾È¤µ¤ì¤ë¿·¤·¤¤¥×¥í¥»¥¹¤Ï¡¢°Ê²¼¤ÎÅÀ¤ò½ü¤¡¢ parent ¤Ç»²¾È¤µ¤ì¤ë¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤Î´°Á´¤ÊÊ£À½¤Ç¤¢¤ë:- *
- »Ò¥×¥í¥»¥¹¤Ï¼«¿È¤ÎÆÈ¼«¤Î¥×¥í¥»¥¹ ID ¤ò»ý¤Á¡¢ ¤³¤Î PID ¤Ï´û¸¤Î¤É¤Î¥×¥í¥»¥¹¥°¥ë¡¼¥× (setpgid(2)) ¤Î ID ¤È¤â°ìÃפ·¤Ê¤¤¡£
- *
- »Ò¥×¥í¥»¥¹¤Î¿Æ¥×¥í¥»¥¹ ID ¤Ï¡¢¿Æ¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹ ID ¤ÈƱ¤¸¤Ç¤¢¤ë¡£
- *
- »Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤Î¥á¥â¥ê¥í¥Ã¥¯ (mlock(2), mlockall(2)) ¤ò°ú¤·Ñ¤¬¤Ê¤¤¡£
- *
- ¥×¥í¥»¥¹¤Î»ñ¸»ÍøÍÑÎÌ (getrusage(2)) ¤È CPU ¥¿¥¤¥à¥«¥¦¥ó¥¿ (times(2)) ¤¬¡¢»Ò¥×¥í¥»¥¹¤Ç¤Ï 0 ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¤ë¡£
- *
- »Ò¥×¥í¥»¥¹¤Î½èÍýÂÔ¤Á¤Î¥·¥°¥Ê¥ë¤Î½¸¹ç (sigpending(2)) ¤Ï¡¢½é´ü¾õÂ֤Ǥ϶õ¤Ë¤Ê¤ë¡£
- *
- »Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤«¤é¥»¥Þ¥Õ¥©Ä´À° (semop(2)) ¤ò°ú¤·Ñ¤¬¤Ê¤¤¡£
- *
- »Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤«¤é¥ì¥³¡¼¥É¥í¥Ã¥¯ (fcntl(2)) ¤ò°ú¤·Ñ¤¬¤Ê¤¤¡£
- *
- »Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤«¤é¥¿¥¤¥Þ¡¼ (setitimer(2) alarm(3), timer_create(3)) ¤ò°ú¤·Ñ¤¬¤Ê¤¤¡£
- *
- »Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤«¤é¼ç¤À¤Ã¤¿È󯱴ü I/O Áàºî (aio_read(3), aio_write(3)) ¤ò°ú¤·Ñ¤¬¤Ê¤¤¡£
¾åµ¤Î¥ê¥¹¥È¤Ë¤¢¤ë¥×¥í¥»¥¹Â°À¤Ï¡¢POSIX.1-2001 ¤ÇÁ´¤Æ»ØÄꤵ¤ì¤Æ¤¤¤ë¡£ ¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹¤Ï¡¢°Ê²¼¤Î Linux ¸ÇÍ¤Î¥×¥í¥»¥¹Â°À¤â°Û¤Ê¤ë:
- *
- »Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤«¤é¥Ç¥£¥ì¥¯¥È¥êÊѹ¹ÄÌÃÎ (dnotify) (fcntl(2) ¤Ë¤ª¤±¤ë F_NOTIFY ¤ÎÀâÌÀ¤ò»²¾È) ¤ò°ú¤·Ñ¤¬¤Ê¤¤¡£
- *
- prctl(2) ¤Î PR_SET_PDEATHSIG ¤ÎÀßÄ꤬¥ê¥»¥Ã¥È¤µ¤ì¡¢»Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤¬½ªÎ»¤·¤¿¤È¤¤Ë ¥·¥°¥Ê¥ë¤ò¼õ¿®¤·¤Ê¤¤¡£
- *
- madvise(2) ¤Î MADV_DONTFORK ¥Õ¥é¥°¤Ç¥Þ¡¼¥¯¤µ¤ì¤¿¥á¥â¥ê¥Þ¥Ã¥Ô¥ó¥°¤Ï¡¢ fork(2) ¤Ë¤è¤Ã¤Æ°ú¤·Ñ¤¬¤ì¤Ê¤¤¡£
- *
- »Ò¥×¥í¥»¥¹¤Î½ªÎ»¥·¥°¥Ê¥ë¤Ï¾ï¤Ë SIGCHLD ¤Ç¤¢¤ë (clone(2) ¤ò»²¾È)¡£
¤µ¤é¤Ë°Ê²¼¤ÎÅÀ¤Ë¤Ä¤¤¤ÆÃí°Õ¤¹¤ë¤³¤È:
- *
- »Ò¥×¥í¥»¥¹¤Ï¥·¥ó¥°¥ë¥¹¥ì¥Ã¥É --- fork(2) ¤ò¸Æ¤Ó½Ð¤·¤¿¥¹¥ì¥Ã¥É¤ÇÀ¸À®¤µ¤ì¤ë¡£ ¿Æ¥×¥í¥»¥¹¤Î²¾ÁÛ¥¢¥É¥ì¥¹¶õ´ÖÁ´ÂΤ¬»Ò¥×¥í¥»¥¹¤ËÊ£À½¤µ¤ì¤ë¡£ ¤³¤ì¤Ë¤Ï¥ß¥å¡¼¥Æ¥Ã¥¯¥¹ (mutex) ¤Î¾õÂÖ¡¦¾ò·ïÊÑ¿ô¡¦ pthread ¥ª¥Ö¥¸¥§¥¯¥È¤¬´Þ¤Þ¤ì¤ë¡£ ¤³¤ì¤¬°ú¤µ¯¤³¤¹ÌäÂê¤ò°·¤¦¤Ë¤Ï¡¢ pthread_atfork(3) ¤ò»È¤¦¤ÈÎɤ¤¤À¤í¤¦¡£
- *
- »Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤¬»ý¤Ä ¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î½¸¹ç¤Î¥³¥Ô¡¼¤ò°ú¤·Ñ¤°¡£ »Ò¥×¥í¥»¥¹¤Î³Æ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢ ¿Æ¥×¥í¥»¥¹¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂбþ¤¹¤ë Ʊ¤¸¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò»²¾È¤¹¤ë (open(2) ¤ò»²¾È)¡£ ¤³¤ì¤Ï 2 ¤Ä¤Î¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬¡¢¥Õ¥¡¥¤¥ë¾õÂ֥ե饰¡¦ ¸½ºß¤Î¥Õ¥¡¥¤¥ë¥ª¥Õ¥»¥Ã¥È¡¦¥·¥°¥Ê¥ë¶îư (signal-driven) I/O °À (fcntl(2) ¤Ë¤ª¤±¤ë F_SETOWN, F_SETSIG ¤ÎÀâÌÀ¤ò»²¾È) ¤ò¶¦Í¤¹¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
- *
- »Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤¬»ý¤Ä¥ª¡¼¥×¥ó¥á¥Ã¥»¡¼¥¸¥¥å¡¼¥Ç¥£¥¹¥¯¥ê¥×¥¿ (mq_overview(7) ¤ò»²¾È) ¤Î½¸¹ç¤Î¥³¥Ô¡¼¤ò°ú¤·Ñ¤°¡£ »Ò¥×¥í¥»¥¹¤Î³Æ¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢ ¿Æ¥×¥í¥»¥¹¤Î¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂбþ¤¹¤ë Ʊ¤¸¥ª¡¼¥×¥ó¥á¥Ã¥»¡¼¥¸¥¥å¡¼¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò»²¾È¤¹¤ë¡£ ¤³¤ì¤Ï 2 ¤Ä¤Î¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Æ±¤¸¥Õ¥é¥° (mq_flags) ¤ò¶¦Í¤¹¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
ÊÖ¤êÃÍ
À®¸ù¤·¤¿¾ì¹ç¡¢¿Æ¤Î¼Â¹Ô¥¹¥ì¥Ã¥É¤Ë¤Ï»Ò¥×¥í¥»¥¹¤Î PID ¤¬ÊÖ¤µ¤ì¡¢ »Ò¤Î¼Â¹Ô¥¹¥ì¥Ã¥É¤Ë¤Ï 0 ¤¬ÊÖ¤µ¤ì¤ë¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¡¢¿Æ¥×¥í¥»¥¹¤Ë -1 ¤òÊÖ¤·¡¢»Ò¥×¥í¥»¥¹¤ÏÀ¸À®¤µ¤ì¤Ê¤¤¡£ ¤Þ¤¿¡¢ errno ¤¬Å¬ÀÚ¤ËÀßÄꤵ¤ì¤ë¡£¥¨¥é¡¼
- EAGAIN
- ¿Æ¥×¥í¥»¥¹¤Î¥Ú¡¼¥¸¡¦¥Æ¡¼¥Ö¥ë¤Î¥³¥Ô¡¼¤È »Ò¥×¥í¥»¥¹¤Î¥¿¥¹¥¯¹½Â¤¤ËÀ¸À®¤ËɬÍפʥá¥â¥ê¤ò fork() ¤¬³ä¤êÅö¤Æ¤ë¤³¤È¤¬¤Ç¤¤Ê¤«¤Ã¤¿¡£
- EAGAIN
- ¸Æ¤Ó½Ð¤·¸µ¤Î RLIMIT_NPROC »ñ¸»¤ÎÀ©¸Â (resource limit) ¤Ë㤷¤¿¤¿¤á¤Ë¡¢¿·¤·¤¤¥×¥í¥»¥¹¤òÀ¸À®¤Ç¤¤Ê¤«¤Ã¤¿¡£ ¤³¤ÎÀ©¸Â¤òͤ¨¤ë¤Ë¤Ï¡¢¥×¥í¥»¥¹¤Ï CAP_SYS_ADMIN ¤Þ¤¿¤Ï CAP_SYS_RESOURCE ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£ (capability) ¤ò»ý¤¿¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
- ENOMEM
- ¥á¥â¥ê¤¬Â¤ê¤Ê¤¤¤¿¤á¤Ë¡¢ fork() ¤ÏɬÍפʥ«¡¼¥Í¥ë¹½Â¤ÂΤò³ä¤êÅö¤Æ¤ë¤³¤È¤¬¤Ç¤¤Ê¤«¤Ã¤¿¡£
½àµò
SVr4, 4.3BSD, POSIX.1-2001.Ãí°Õ
Linux ¤Ç¤Ï¡¢ fork() ¤ò ½ñ¤¹þ¤ß»þ¥³¥Ô¡¼ (copy-on-write)¡¦¥Ú¡¼¥¸¤òÍѤ¤¤Æ¼ÂÁõ¤·¤Æ¤¤¤ë¡£ ¤·¤¿¤¬¤Ã¤Æ¡¢fork ¤ò¹Ô¤¦¤³¤È¤ÎÍ£°ì¤Î¥Ç¥á¥ê¥Ã¥È¤Ï¡¢ ¿Æ¥×¥í¥»¥¹¤Î¥Ú¡¼¥¸¡¦¥Æ¡¼¥Ö¥ë¤òÊ£À½¤È »Ò¥×¥í¥»¥¹¼«¿È¤Î¥¿¥¹¥¯¹½Â¤¤ÎºîÀ®¤Î¤¿¤á¤Î»þ´Ö¤È¥á¥â¥ê¤¬É¬Íפʤ³¤È¤Ç¤¢¤ë¡£Îã
pipe(2) ¤ª¤è¤Ó wait(2) ¤ò»²¾È¡£´ØÏ¢¹àÌÜ
clone(2), execve(2), setrlimit(2), unshare(2), vfork(2), wait(2), capabilities(7)Contenus ©2006-2023 Benjamin Poulain
Design ©2006-2023 Maxime Vantorre