clone

CLONE(2)        Ð ÑководÑÑво пÑогÑаммиÑÑа Linux        CLONE(2)



ÐÐЯ
       clone - ÑоздаÑÑ Ð¿ÑоÑеÑÑ-поÑомок

ÐÐÐÐÐ
       #include <sched.h>

       int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);

       _syscall2(int, clone, int, flags, void *, child_stack)


ÐÐÐСÐÐÐÐ
       clone ÑоздаÑÑ Ð½Ð¾Ð²Ñй пÑоÑеÑÑ ÐºÐ°Ðº и fork(2).  clone
       ÑвлÑеÑÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑеÑной ÑÑнкÑией веÑÑнего
       ÑÑÐ¾Ð²Ð½Ñ Ð½Ð°Ð´ ÑиÑÑемнÑм вÑзовом clone, коÑоÑÑй
       далее бÑÐ´ÐµÑ Ð½Ð°Ð·ÑваÑÑÑÑ sys_clone.  ÐпиÑание
       sys_clone даÑÑÑÑ Ð´Ð°Ð»ÐµÐµ в конÑе данной ÑÑÑаниÑÑ
       ÑÑководÑÑва.

       РоÑлиÑие Ð¾Ñ fork(2), вÑÑеÑказаннÑе ÑиÑÑемнÑе
       вÑÐ·Ð¾Ð²Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ Ð¿ÑоÑеÑÑÑ-поÑÐ¾Ð¼ÐºÑ ÑазделÑÑÑ
       ÑаÑÑи Ð¸Ñ ÐºÐ¾Ð½ÑекÑÑа вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ Ð²ÑзÑваÑÑим
       пÑоÑеÑÑом: Ñакие как облаÑÑÑ Ð¿Ð°Ð¼ÑÑи, ÑаблиÑÑ
       ÑайловÑÑ Ð´ÐµÑкÑипÑоÑов и ÑаблиÑÑ Ð¾Ð±ÑабоÑÑиков
       Ñигналов.  (ÐамеÑим, ÑÑо на данной ÑÑÑаниÑе
       ÑÑководÑÑва, "вÑзÑваÑÑий пÑоÑеÑÑ" обÑÑно
       ÑооÑвеÑÑÑвÑÐµÑ "ÑодиÑелÑÑÐºÐ¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ". Ðо Ñм.
       ниже опиÑание CLONE_PARENT).

       ÐÑзов clone в оÑновном иÑполÑзÑеÑÑÑ Ð´Ð»Ñ
       ÑеализаÑии ÑÑедов (ниÑей): неÑколÑко ÑÑедов
       ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² какой-либо пÑогÑамме, коÑоÑÑе
       запÑÑÐµÐ½Ñ ÐºÐ¾Ð½ÐºÑÑенÑно в ÑазделÑемом
       пÑоÑÑÑанÑÑве памÑÑи.

       Ðогда пÑоÑеÑÑ-поÑомок ÑоздаÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ clone,
       он запÑÑÐºÐ°ÐµÑ ÑÑнкÑионалÑное пÑиложение
       fn(arg).  (ÐÑо оÑлиÑаеÑÑÑ Ð¾Ñ fork(2), где вÑполнение
       пÑодолжаеÑÑÑ Ð² поÑомке Ð¾Ñ ÑоÑки вÑзова
       fork(2)).  ÐÑгÑÐ¼ÐµÐ½Ñ fn ÑвлÑеÑÑÑ ÑказаÑелем на
       ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²ÑзÑваеÑÑÑ Ð¿ÑоÑеÑÑом-поÑомком
       в наÑале Ñвоего вÑполнениÑ.  ÐÑгÑÐ¼ÐµÐ½Ñ arg
       пеÑедаÑÑÑÑ ÑÑой fn ÑÑнкÑии.

       Ðогда пÑоиÑÑÐ¾Ð´Ð¸Ñ Ð²Ð¾Ð·Ð²ÑÐ°Ñ Ð¸Ð· ÑÑнкÑионалÑного
       пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ fn(arg), пÑоÑеÑÑ-поÑомок завеÑÑаеÑÑÑ.
       Целое знаÑение, возвÑаÑаемое fn, ÑвлÑеÑÑÑ
       кодом вÑÑода пÑоÑеÑÑа-поÑомка.
       ÐÑоÑеÑÑ-поÑомок Ð¼Ð¾Ð¶ÐµÑ Ñакже бÑÑÑ Ð·Ð°Ð²ÐµÑÑÑн
       ÑвнÑм обÑазом, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð²Ñзова exit(2) или
       поÑле полÑÑÐµÐ½Ð¸Ñ ÑаÑалÑного Ñигнала.

       ÐÑгÑÐ¼ÐµÐ½Ñ child_stack задаÑÑ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ ÑÑека,
       иÑполÑзÑемого пÑоÑеÑÑом-поÑомком.  ÐаÑÐ¸Ð½Ð°Ñ Ñ
       моменÑа, когда пÑоÑеÑÑ-поÑомок и вÑзÑваÑÑий
       пÑоÑеÑÑ Ð¼Ð¾Ð³ÑÑ ÑазделÑÑÑ Ð¿Ð°Ð¼ÑÑÑ, пÑоÑеÑÑ-поÑомок
       не Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð² Ñом же ÑÑеке, ÑÑо и
       вÑзÑваÑÑий пÑоÑеÑÑ. ÐÑзÑваÑÑий пÑоÑеÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½,
       Ñаким обÑазом, ÑÑÑановиÑÑ Ð¿ÑоÑÑÑанÑÑво памÑÑи
       Ð´Ð»Ñ ÑÑека пÑоÑеÑÑа-поÑомка и пеÑедаÑÑ
       ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑо пÑоÑÑÑанÑÑво в вÑзове clone.
       СÑеки ÑаÑÑÑÑ Ð²Ð½Ð¸Ð· Ð´Ð»Ñ Ð²ÑÐµÑ Ð¿ÑоÑеÑÑоÑов, на
       коÑоÑÑÑ ÑабоÑÐ°ÐµÑ Linux (за иÑклÑÑением HP PA
       пÑоÑеÑÑоÑов), Ñак ÑÑо child_stack обÑÑно ÑказÑваеÑ
       на наиболее вÑÑокий адÑÐµÑ Ð² пÑоÑÑÑанÑÑве
       памÑÑи, коÑоÑое ÑÑÑанавливаеÑÑÑ Ð´Ð»Ñ ÑÑека
       пÑоÑеÑÑа-поÑомка.

       ÐладÑий Ð±Ð°Ð¹Ñ flags ÑодеÑÐ¶Ð¸Ñ Ð½Ð¾Ð¼ÐµÑ Ñигнала,
       коÑоÑÑй поÑÑлаеÑÑÑ ÑодиÑелÑ, когда поÑомок
       ÑмиÑаеÑ. ÐÑли ÑÑÐ¾Ñ Ñигнала задаÑÑÑÑ ÐºÐ°Ðº неÑÑо
       оÑлиÑное Ð¾Ñ SIGCHLD, Ñо ÑодиÑелÑÑкий пÑоÑеÑÑ
       должен задаÑÑ Ð¾Ð¿ÑÐ¸Ñ __WALL или __WCLONE пÑи
       ожидании завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ð¿Ð¾Ñомка Ñ
       помоÑÑÑ Ð²Ñзова wait(2).  ÐÑли никакой Ñигнал
       не задан, Ñо ÑодиÑелÑÑкий пÑоÑеÑÑ Ð½Ðµ
       извеÑаеÑÑÑ Ñигналом, когда поÑомок
       завеÑÑаеÑÑÑ.

       ÐÑгÑÐ¼ÐµÐ½Ñ flags ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· одного или более
       даннÑÑ Ð½Ð¸Ð¶Ðµ биÑовÑÑ Ñлагов, коÑоÑÑе
       ÑкладÑваÑÑÑÑ Ð¿Ð¾ пÑавилам биÑового ÑложениÑ
       (OR). Флаги задаÑÑ Ð¿Ð¾ÑÑдок пÑоÑеÑÑов и Ñо, ÑÑо
       ÑазделÑеÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð²ÑзÑваÑÑим пÑоÑеÑÑом и
       пÑоÑеÑÑом-поÑомком:


       CLONE_PARENT
              (веÑка Linux 2.4 и вÑÑе) ÐÑли ÑÑÑановлен Ñлаг
              CLONE_PARENT, Ñо ÑодиÑÐµÐ»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ поÑомка
              (как возÑаÑÐ°ÐµÑ Ð²Ñзов getppid(2)) бÑÐ´ÐµÑ Ñаким
              же как и Ñ Ð²ÑзÑваÑÑего пÑоÑеÑÑа.

              ÐÑли Ñлаг CLONE_PARENT не ÑÑÑановлен, Ñо (как
              и в fork(2)) ÑодиÑелем бÑÐ´ÐµÑ Ð²ÑзÑваÑÑий
              пÑоÑеÑÑ.

              ÐамеÑим, ÑÑо ÑÑо ÑÐ¾Ñ ÑодиÑелÑÑкий пÑоÑеÑÑ,
              коÑоÑÑй возÑаÑаеÑÑÑ Ð²Ñзовом getppid(2), и
              коÑоÑÐ¾Ð¼Ñ Ð¿ÑиÑÐ¾Ð´Ð¸Ñ Ñигнал, когда
              поÑомок завеÑÑаеÑÑÑ, Ñак ÑÑо еÑли CLONE_PARENT
              ÑÑÑановлен, Ñо Ñигнал бÑÐ´ÐµÑ Ð¿Ð¾ÑÑлаÑÑÑÑ
              ÑодиÑÐµÐ»Ñ Ð²ÑзÑваÑÑего пÑоÑеÑÑа, а не
              ÑÐ°Ð¼Ð¾Ð¼Ñ Ð²ÑзÑваÑÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑÑ.


       CLONE_FS
              ÐÑли Ñлаг CLONE_FS ÑÑÑановлен, вÑзÑваÑÑий
              пÑоÑеÑÑ Ð¸ пÑоÑеÑÑ-поÑомок ÑазделÑÑÑ Ð¾Ð´Ð½Ñ Ð¸
              ÑÑ Ð¶Ðµ инÑоÑмаÑÐ¸Ñ Ð¾ Ñаловой ÑиÑÑеме. Ðна
              вклÑÑÐ°ÐµÑ ÐºÐ¾Ñневой каÑалог Ñайловой
              ÑиÑÑемÑ, ÑекÑÑий ÑабоÑий каÑалог и
              знаÑение umask. ÐÑбÑе вÑÐ·Ð¾Ð²Ñ chroot(2), chdir(2),
              или umask(2) вÑполнÑемÑе вÑзÑваÑÑим
              пÑоÑеÑÑом или пÑоÑеÑÑом-поÑомком Ñакже
              даÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð½Ñй ÑÑÑекÑ.

              ÐÑли Ñлаг CLONE_FS не ÑÑÑановлен,
              пÑоÑеÑÑ-поÑомок ÑабоÑÐ°ÐµÑ Ñ ÐºÐ¾Ð¿Ð¸ÐµÐ¹
              инÑоÑмаÑии по Ñайловой ÑиÑÑеме оÑ
              вÑзÑваÑÑего пÑоÑеÑÑа, ÑнÑÑой на моменÑ
              вÑзова clone.  ÐÑÐ·Ð¾Ð²Ñ chroot(2), chdir(2), umask(2)
              вÑполнÑемÑе позже одним из пÑоÑеÑÑов
              не оказÑваÑÑ ÑÑÑÐµÐºÑ Ð½Ð° дÑÑгой пÑоÑеÑÑ.


       CLONE_FILES
              ÐÑли Ñлаг CLONE_FILES ÑÑÑановлен, Ñо
              вÑзÑваÑÑий пÑоÑеÑÑ Ð¸ пÑоÑеÑÑ-поÑомок
              ÑазделÑÑÑ Ð¾Ð´Ð½Ñ Ð¸ ÑÑ Ð¶Ðµ ÑаблиÑÑ ÑайловÑÑ
              деÑкÑипÑоÑов. ФайловÑе деÑкÑипÑоÑÑ
              вÑегда ÑказÑваÑÑ Ð½Ð° Ñе же ÑÐ°Ð¹Ð»Ñ Ð²
              вÑзÑваÑÑем пÑоÑеÑÑе и пÑоÑеÑÑе-поÑомке.
              ÐÑбÑе ÑайловÑе деÑкÑипÑоÑÑ, ÑоздаваемÑе
              вÑзÑваÑÑим пÑоÑеÑÑом или
              пÑоÑеÑÑом-поÑомком Ñакже ÑабоÑаÑÑ Ð²
              дÑÑгом пÑоÑеÑÑе. Также, еÑли один из
              пÑоÑеÑÑов закÑÑÐ²Ð°ÐµÑ ÑайловÑй деÑкÑипÑоÑ
              или изменÑÐµÑ Ð°ÑÑоÑииÑованнÑе Ñ Ð½Ð¸Ð¼
              Ñлаги, Ñо ÑÑо оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸Ñние и на
              дÑÑгой пÑоÑеÑÑ.

              ÐÑли Ñлаг CLONE_FILES не ÑÑÑановлен,
              пÑоÑеÑÑ-поÑомок наÑледÑÐµÑ ÐºÐ¾Ð¿Ð¸Ð¸ вÑеÑ
              ÑайловÑÑ Ð´ÐµÑкÑипÑоÑов, оÑкÑÑÑÑÑ Ð²
              вÑзÑваÑÑем пÑоÑеÑÑе на вÑÐµÐ¼Ñ Ð²Ñзова clone.
              ÐпеÑаÑии над ÑайловÑми деÑкÑипÑоÑами,
              вÑполнÑемÑе позже вÑзÑваÑÑим пÑоÑеÑÑом
              или пÑоÑеÑÑом-поÑомком, не оказÑваÑÑ
              ÑÑÑекÑа на дÑÑгой пÑоÑеÑÑ.


       CLONE_NEWNS
              (ÐаÑÐ¸Ð½Ð°Ñ Ñ Linux 2.4.19) ÐапÑÑÐºÐ°ÐµÑ Ð¿Ð¾Ñомок в
              новом пÑоÑÑÑанÑÑве имÑн.

              ÐаждÑй пÑоÑеÑÑ Ð¶Ð¸Ð²ÑÑ Ð² некоÑоÑом
              пÑоÑÑÑанÑÑве имÑн.  ÐÑоÑÑÑанÑÑво имÑн
              пÑоÑеÑÑа - ÑÑо даннÑе (ÑпиÑок
              ÑмонÑиÑованнÑÑ ÑайловÑÑ ÑиÑÑем),
              опиÑÑваÑÑие ÑайловÑÑ Ð¸ÐµÑаÑÑиÑ, видимÑÑ
              ÑÑим пÑоÑеÑÑом. ÐоÑле вÑзова fork(2) или
              clone(2) где не ÑÑÑановлен Ñлаг CLONE_NEWNS,
              поÑомок живÑÑ Ð² Ñом же пÑоÑÑÑанÑÑве имÑн,
              ÑÑо и ÑодиÑелÑ.  СиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ mount(2) и
              umount(2) изменÑÑÑ Ð¿ÑоÑÑÑанÑÑво имÑн
              вÑзÑваÑÑего пÑоÑеÑÑа и, Ñ ÑÑого моменÑа,
              оказÑваÑÑ ÑÑÑÐµÐºÑ Ð½Ð° вÑе пÑоÑеÑÑÑ, коÑоÑÑе
              живÑÑ Ð² ÑÑом же пÑоÑÑÑанÑÑве имÑн, но не
              оказÑваÑÑ ÑÑÑÐµÐºÑ Ð½Ð° пÑоÑеÑÑÑ Ð² дÑÑгиÑ
              пÑоÑÑÑанÑÑÐ²Ð°Ñ Ð¸Ð¼Ñн.

              ÐоÑле вÑзова clone(2) где Ñлаг CLONE_NEWNS
              ÑÑÑановлен, поÑомок запÑÑкаеÑÑÑ Ð² новом
              пÑоÑÑÑанÑÑве имÑн, иниÑиализиÑованном
              копией пÑоÑÑÑанÑÑва имÑн ÑодиÑелÑ.

              ТолÑко пÑивелегиÑованнÑй пÑоÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ
              ÑÑÑанавливаÑÑ Ñлаг CLONE_NEWNS.  Ðе
              допÑÑкаеÑÑÑ ÑовмеÑÑное иÑполÑзование
              Ñлагов CLONE_NEWNS и CLONE_FS в одном вÑзове
              clone.


       CLONE_SIGHAND
              ÐÑли Ñлаг CLONE_SIGHAND ÑÑÑановлен, вÑзÑваÑÑий
              пÑоÑеÑÑ Ð¸ пÑоÑеÑÑ-поÑомок ÑазделÑÑÑ Ð¾Ð´Ð½Ñ Ð¸
              ÑÑ Ð¶Ðµ ÑаблиÑÑ Ð¾Ð±ÑабоÑÑиков Ñигналов.
              ÐÑли вÑзÑваÑÑий пÑоÑеÑÑ Ð¸Ð»Ð¸
              пÑоÑеÑÑ-поÑомок вÑзÑваÑÑ sigaction(2) длÑ
              Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ñи полÑÑении
              Ñигнала, Ñо ÑÑо поведение изменÑеÑÑÑ
              Ñакже и в дÑÑгом пÑоÑеÑÑе. Ðднако,
              вÑзÑваÑÑий пÑоÑеÑÑ Ð¸ пÑоÑеÑÑ-поÑомок имеÑÑ
              ÑазлиÑнÑе маÑки Ñигналов и ÑпиÑки
              ожидаÑÑÐ¸Ñ Ð¾Ð±ÑабоÑки Ñигналов. Так,
              один из Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑ Ð¸Ð»Ð¸
              деблокиÑоваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑигналÑ,
              иÑполÑзÑÑ sigprocmask(2) и ÑÑо не бÑдеÑ
              оказÑваÑÑ ÑÑÑÐµÐºÑ Ð½Ð° дÑÑгой пÑоÑеÑÑ.

              ÐÑли Ñлаг CLONE_SIGHAND не ÑÑÑановлен,
              пÑоÑеÑÑ-поÑомок наÑледÑÐµÑ ÐºÐ¾Ð¿Ð¸Ñ
              обÑабоÑÑиков ÑобÑÑий вÑзÑваÑÑего
              пÑоÑеÑÑа, ÑнÑÑÑÑ Ð½Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñзова clone .
              ÐÑÐ·Ð¾Ð²Ñ sigaction(2) вÑполнÑемÑе поÑле одним
              из пÑоÑеÑÑов, не оказÑваÑÑ ÑÑÑÐµÐºÑ Ð½Ð°
              дÑÑгой пÑоÑеÑÑ.


       CLONE_PTRACE
              ÐÑли Ñлаг CLONE_PTRACE ÑÑÑановлен и
              вÑзÑваÑÑий пÑоÑеÑÑ Ð½Ð°ÑодиÑÑÑ Ð² Ñежиме
              ÑÑаÑÑиÑовки, Ñо пÑоÑеÑÑ-поÑомок Ñаже бÑдеÑ
              ÑабоÑаÑÑ Ð² Ñежиме ÑÑаÑÑиÑовки (Ñм.  ptrace(2)).


       CLONE_VFORK
              ÐÑли Ñлаг CLONE_VFORK ÑÑÑановлен, Ñо
              вÑполнение вÑзÑваÑÑего пÑоÑеÑÑа
              пÑиоÑÑанавливаеÑÑÑ Ð¿Ð¾ÐºÐ° поÑомок не
              оÑÐ²Ð¾Ð±Ð¾Ð´Ð¸Ñ Ñвои ÑеÑÑÑÑÑ Ð²Ð¸ÑÑÑалÑной памÑÑи
              ÑеÑез вÑзов execve(2) или _exit(2) (как в
              vfork(2)).

              ÐÑли Ñлаг CLONE_VFORK не ÑÑÑановлен, Ñо поÑле
              вÑзова и вÑзÑваÑÑий пÑоÑеÑÑ Ð¸
              пÑоÑеÑÑ-поÑомок вклÑÑаÑÑÑÑ Ð² паÑаллелÑнÑÑ
              ÑабоÑÑ ÑеÑез ÑиÑÑемнÑй планиÑовÑик и
              пÑиложение не Ð¼Ð¾Ð¶ÐµÑ Ð·Ð½Ð°ÑÑ Ð² каком
              поÑÑдке бÑÐ´ÐµÑ Ð¾ÑÑÑеÑÑвлÑÑÑÑÑ Ð¸Ñ
              вÑполнение.


       CLONE_VM
              ÐÑли Ñлаг CLONE_VM ÑÑÑановлен, вÑзÑваÑÑий
              пÑоÑеÑÑ Ð¸ пÑоÑеÑÑ-поÑомок запÑÑкаÑÑÑÑ Ð² Ñом
              же пÑоÑÑÑанÑÑве памÑÑи. Ð ÑаÑÑноÑÑи, запиÑи
              в памÑÑÑ, вÑполненнÑе вÑзÑваÑÑим
              пÑоÑеÑÑом или пÑоÑеÑÑом-поÑомком Ñакже
              Ð²Ð¸Ð´Ð½Ñ Ð¸Ð· дÑÑгого пÑоÑеÑÑа.  ÐÑоме Ñого,
              лÑбÑе оÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи (mapping) или иÑ
              завеÑÑение (unmapping) вÑполнÑемÑе ÑеÑез
              mmap(2) или munmap(2) поÑомком или вÑзÑваÑÑим
              пÑоÑеÑÑом, Ñакже оказÑваÑÑ ÑÑÑÐµÐºÑ Ð½Ð°
              дÑÑгой пÑоÑеÑÑ.

              ÐÑли Ñлаг CLONE_VM не ÑÑÑановлен, пÑоÑеÑÑ
              поÑомок запÑÑкаеÑÑÑ Ð² оÑделÑной копии
              пÑоÑÑÑанÑÑва памÑÑи вÑзÑваÑÑего пÑоÑеÑÑа,
              ÑнÑÑой на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñзова clone.  ÐапиÑи в
              памÑÑÑ Ð¸Ð»Ð¸ оÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÑполнÑемÑе одним
              пÑоÑеÑÑом не даÑÑ ÑÑÑекÑа в дÑÑгом пÑоÑеÑÑе
              как и в fork(2).


       CLONE_PID
              ÐÑли Ñлаг CLONE_PID ÑÑÑановлен,
              пÑоÑеÑÑ-поÑомок ÑоздаÑÑÑÑ Ñ Ñаким же
              иденÑиÑикаÑоÑом пÑоÑеÑÑа (ID) как и
              вÑзÑваÑÑий пÑоÑеÑÑ.

              ÐÑли CLONE_PID не ÑÑÑановлен,
              пÑоÑеÑÑ-поÑомок полÑÑÐ°ÐµÑ ÑникалÑнÑй
              иденÑиÑикаÑÐ¾Ñ Ð¿ÑоÑеÑÑа, оÑлиÑаÑÑийÑÑ Ð¾Ñ
              иденÑиÑикаÑоÑа вÑзÑваÑÑего пÑоÑеÑÑа.

              ÐаннÑй Ñлаг Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑановлен ÑолÑко
              пÑоÑеÑÑом загÑÑзки ÑиÑÑÐµÐ¼Ñ (Ñ PID 0).


       CLONE_THREAD
              (ÐаÑÐ¸Ð½Ð°Ñ Ñ Linux 2.4) ÐÑли Ñлаг CLONE_THREAD
              ÑÑÑановлен, поÑомок ÑазмеÑаеÑÑÑ Ð² Ñой же
              гÑÑппе ÑÑедов, ÑÑо и вÑзÑваÑÑий пÑоÑеÑÑ.

              ÐÑли Ñлаг CLONE_THREAD не ÑÑÑанлвен, Ñо
              поÑомок ÑазмеÑаеÑÑÑ Ð² Ñвоей ÑобÑÑвенной
              (новой) гÑÑппе ÑÑедов, где ID гÑÑппÑ
              Ñакой же как и иденÑиÑикаÑÐ¾Ñ Ð¿ÑоÑеÑÑа.

              (ÐÑÑÐ¿Ð¿Ñ ÑÑедов ÑвлÑÑÑÑÑ Ð¾ÑобенноÑÑÑÑ,
              добавленной в Linux 2.4 Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки
              клаÑÑа ÑÑедов POSIX, ÑпиÑка ÑÑедов,
              ÑазделÑÑÑÐ¸Ñ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ PID. Ð Linux 2.4,
              вÑзов getpid(2) возвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑ
              гÑÑÐ¿Ð¿Ñ ÑÑедов, вÑзÑваÑÑего пÑоÑеÑÑа.)


   sys_clone
       СиÑÑемнÑй вÑзов sys_clone ÑооÑвеÑÑÑвÑÐµÑ Ð±Ð¾Ð»ÐµÐµ
       закÑÑÑÐ¾Ð¼Ñ fork(2) в Ñом плане, ÑÑо вÑполнение в
       поÑомке пÑодолжаеÑÑÑ Ð¾Ñ Ð¼ÐµÑÑа данного
       вÑзова.  Таким обÑазом sys_clone ÑÑебÑÐµÑ ÑолÑко
       аÑгÑменÑÑ flags и child_stack, коÑоÑÑе имеÑÑ ÑÐ¾Ñ Ð¶Ðµ
       ÑмÑÑл, ÑÑо и Ð´Ð»Ñ Ð²Ñзова clone.  (ÐамеÑим, ÑÑо
       поÑÑдок ÑÑÐ¸Ñ Ð°ÑгÑменÑов оÑлиÑаеÑÑÑ Ð¾Ñ clone.)

       ÐÑÑгое оÑлиÑие sys_clone ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо
       аÑгÑÐ¼ÐµÐ½Ñ child_stack Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÑлÑм, в ÑÑом ÑлÑÑае
       ÑеманÑика copy-on-write обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð»ÑÑение
       поÑомком оÑделÑнÑÑ ÐºÐ¾Ð¿Ð¸Ð¹ ÑÑÑÐ°Ð½Ð¸Ñ ÑÑека,
       когда один из пÑоÑеÑÑов изменÑÐµÑ ÑÑек. Ð ÑÑом
       ÑлÑÑае, Ð´Ð»Ñ Ð¿ÑавилÑной ÑабоÑÑ, не должен бÑÑÑ
       задан Ñлаг CLONE_VM.


ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       Ð ÑлÑÑае ÑÑпеÑа, в вÑзÑваÑÑий ÑÑед возÑаÑаеÑÑÑ PID
       пÑоÑеÑÑа-поÑомка. Ð ÑлÑÑае оÑибки, в конÑекÑÑ
       вÑзÑваÑего пÑоÑеÑÑа возвÑаÑаеÑÑÑ -1, пÑоÑеÑÑ
       поÑомок не бÑÐ´ÐµÑ Ñоздан и знаÑение errno
       ÑÑÑанавливаеÑÑÑ ÑооÑвеÑÑÑвÑÑÑим обÑазом.


ÐШÐÐÐÐ
       EAGAIN Уже запÑÑено ÑлиÑком много пÑоÑеÑÑов.

       ENOMEM Ðе Ð¼Ð¾Ð³Ñ Ð²ÑделиÑÑ ÑÑебÑемÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð´Ð»Ñ
              ÑÑÑÑкÑÑÑÑ, опиÑÑваÑÑей пÑоÑеÑÑ-поÑомок или
              Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÐµÑ ÑаÑÑей конÑекÑÑа
              вÑзÑваÑÑего пÑоÑеÑÑа, коÑоÑÑе необÑодимо
              ÑкопиÑоваÑÑ.

       EINVAL ÐозвÑаÑаеÑÑÑ clone когда Ð´Ð»Ñ child_stack бÑло
              задано нÑлевое знаÑение.

       EINVAL Ðба Ñлага CLONE_FS и CLONE_NEWNS бÑли Ð·Ð°Ð´Ð°Ð½Ñ Ð²
              аÑгÑменÑе flags.

       EINVAL CLONE_THREAD бÑл задан, но CLONE_SIGHAND неÑ.
              (ÐаÑÐ¸Ð½Ð°Ñ Ñ Linux 2.5.35.)

       EPERM  CLONE_PID бÑл задан пÑоÑеÑÑом Ñ Ð½ÐµÐ½ÑлевÑм
              знаÑением PID.

ÐÐÐÐ
       РвеÑÑии ÑдÑа 2.1.97, Ñлаг CLONE_PID не должен
       иÑполÑзоваÑÑÑÑ, Ñак как дÑÑгие ÑаÑÑи данного
       ÑдÑа и болÑÑинÑÑво ÑиÑÑемного пÑогÑаммного
       обеÑпеÑÐµÐ½Ð¸Ñ ÑаÑÑÑиÑÑваÑÑ, ÑÑо иденÑиÑикаÑоÑÑ
       пÑоÑеÑÑов ÑвлÑÑÑÑÑ ÑникалÑнÑми.

       ÐÑзов clone оÑÑÑÑÑÑвÑÐµÑ Ð² libc веÑÑии 5.  libc 6
       (извеÑÑÐ½Ð°Ñ ÐºÐ°Ðº glibc 2) пÑедоÑÑавлÑÐµÑ Ð²Ñзов clone
       как опиÑÑваеÑÑÑ Ð½Ð° данной ÑÑÑаниÑе
       ÑÑководÑÑва.


ÐÐÐÐЧÐÐÐЯ
       ÐÐ»Ñ ÑÐ´ÐµÑ Ð²ÐµÑÑий 2.4.7-2.4.18 Ñлаг CLONE_THREAD неÑвно
       подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ Ñлаг CLONE_PARENT.


СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       ÐÑÐ·Ð¾Ð²Ñ clone и sys_clone ÑвлÑÑÑÑÑ ÑпеÑиÑиÑнÑми Ð´Ð»Ñ Linux
       и не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑÑÑ Ð² пÑогÑаммаÑ,
       коÑоÑÑе задÑÐ¼Ð°Ð½Ñ ÐºÐ°Ðº пеÑеноÑимÑе на дÑÑгие
       плаÑÑоÑмÑ. ÐÐ»Ñ Ð¿ÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñиложений,
       иÑполÑзÑÑÑÐ¸Ñ ÑÑÐµÐ´Ñ (неÑколÑко ÑÑедов
       ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² одной и Ñой же облаÑÑи памÑÑи)
       лÑÑÑе иÑполÑзоваÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑеÑнÑÑ ÑеализаÑиÑ
       POSIX 1003.1c thread API, ÑакÑÑ ÐºÐ°Ðº библиоÑека
       LinuxThreads (вклÑÑÑÐ½Ð½Ð°Ñ Ð² glibc2).  См.  pthread_create(3).

       ÐÐ°Ð½Ð½Ð°Ñ ÑÑÑаниÑа ÑÑководÑÑва ÑооÑвеÑÑÑвÑÐµÑ ÑдÑам
       2.0.x, 2.1.x, 2.2.x, 2.4.x, а Ñакже glibc 2.0.x и 2.1.x.


СÐÐТРРТÐÐÐÐ
       fork(2), wait(2), pthread_create(3)

ÐÐÐ ÐÐÐÐ
       ÐеÑевÑл Ñ Ð°Ð½Ð³Ð»Ð¸Ð¹Ñкого ÐикÑÐ¾Ñ ÐиÑлобоков
       <corochoone@perm.ru> 2004



Linux 2.4                         2001-12-31                          CLONE(2)