exported form https://nippo.wikihub.io/@_ksss_/20160731140352
mrubyã§ã®fork
ã®ãã°ãç´ããã
https://github.com/iij/mruby-process/pull/7
弿°ã«åæåããã¦ãªã夿°ããããã¯å¼æ°ã«æ¸¡ããã¦ããã®ã§ã ãããmrubyå´ã§åç §ããã¨æ»ã¬ã
ããããfork
ã«ãããã¯å¼æ°ã¯ãããªãã
mrubyã®Cå´ã§ãããã¯å¼æ°ãç¡ããæ¹æ³ã¯2ã¤
mrb_yield(mrb, block, mrb_nil_value())
mrb_yield_argv(mrb, block, 0, NULL)
mrb_yield
ã¨mrb_yield_argv
ã¯ã»ã¼åã颿°ã ãããããã¯å¼æ°ã®åãæ¹ã«éããããã
mrb_yield
ã¯ãããã¯å¼æ°ã1ã¤ã ãæå®ã§ããã
mrb_yield_argv
ã¯0ããããã§ãæå®ã§ããã
颿°ã®ä¸èº«ãã»ã¼åã
MRB_API mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv) { struct RProc *p = mrb_proc_ptr(b); return mrb_yield_with_class(mrb, b, argc, argv, p->env->stack[0], p->target_class); } MRB_API mrb_value mrb_yield(mrb_state *mrb, mrb_value b, mrb_value arg) { struct RProc *p = mrb_proc_ptr(b); return mrb_yield_with_class(mrb, b, 1, &arg, p->env->stack[0], p->target_class); }
https://github.com/mruby/mruby/blob/eb7422af581edff0dd4b1f8259598677b4d32793/src/vm.c#L657-L671
è¦ç´ããã¨ãmrb_yield
ã§ã¯ã©ããªã«ããã°ã£ã¦ã弿°ãä¸ã¤ä¸ãã¦ãããã¨ã«ãªãã®ã§ãæå³çã«ã¯ããããã
ãããã¯å¼æ°ã0åã«ããããã°ãmrb_yield_argv(mrb, block, 0, NULL)
ã使ãã»ããã¨ãµã²ã
ã©ããã£ã¦ãã®ãã°ãçºè¦ãããã¨ããã¨ãåã«ã³ã³ãã¤ã«ãããclangãwarningã§æãã¦ãããã ãã ã
ã¤ã¾ãã³ã³ãã¤ã«ããããã°çºè¦ã§ããç¶æ ã«ãããã2å¹´è¿ãæ¾ç½®ããã¦ãããã¨ã«ãªãã(ãããã¯å¼æ°ãªããã¤ããªããåé¡ãªãã®ã§)
ããã¦ãããªããããã¤äºãæ°ã«ããã®ã¯ãä¸çã§åãããã ã£ãããã§ããã
ããã¾ãã