博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fork vfork clone
阅读量:4193 次
发布时间:2019-05-26

本文共 2216 字,大约阅读时间需要 7 分钟。

vfork  共享内存描述符和所有的页表。fork除指定SIGCHLD信号以及所有清0的clone标志。

fork clone 都是c语言定义的一直封装函数,只有do_fork 才是内核态函数。

do_fork  copy_process 执行流程和调用关系总结。

do_fork->copy_process->

核心代码

static struct task_struct *copy_process(unsigned long clone_flags,

unsigned long stack_start,
struct pt_regs *regs,
unsigned long stack_size,
int __user *child_tidptr,
struct pid *pid,
int trace)
{

。。。。。。  以下函数需要在设置相应的CLONE_*标志才会被执行。

if ((retval = audit_alloc(p)))

goto bad_fork_cleanup_policy;
/* copy all the process information */
if ((retval = copy_semundo(clone_flags, p)))
goto bad_fork_cleanup_audit;
if ((retval = copy_files(clone_flags, p)))
goto bad_fork_cleanup_semundo;
if ((retval = copy_fs(clone_flags, p)))
goto bad_fork_cleanup_files;
if ((retval = copy_sighand(clone_flags, p)))
goto bad_fork_cleanup_fs;
if ((retval = copy_signal(clone_flags, p)))
goto bad_fork_cleanup_sighand;
if ((retval = copy_mm(clone_flags, p)))
goto bad_fork_cleanup_signal;
if ((retval = copy_namespaces(clone_flags, p)))
goto bad_fork_cleanup_mm;
if ((retval = copy_io(clone_flags, p)))
goto bad_fork_cleanup_namespaces;
retval = copy_thread(clone_flags, stack_start, stack_size, p, regs);
if (retval)
goto bad_fork_cleanup_io;

。。。。。。

}

系统调用代码:

2.6.32代码

int sys_fork(unsigned long p1, unsigned long p2, unsigned long p3,

    unsigned long p4, unsigned long p5, unsigned long p6,
    struct pt_regs *regs)
{
CHECK_FULL_REGS(regs);
return do_fork(SIGCHLD, regs->gpr[1], regs, 0, NULL, NULL);
}
int sys_vfork(unsigned long p1, unsigned long p2, unsigned long p3,
     unsigned long p4, unsigned long p5, unsigned long p6,
     struct pt_regs *regs)
{
CHECK_FULL_REGS(regs);
return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->gpr[1],
regs, 0, NULL, NULL);
}

int sys_clone(unsigned long clone_flags, unsigned long usp,

     int __user *parent_tidp, void __user *child_threadptr,
     int __user *child_tidp, int p6,
     struct pt_regs *regs)
{
CHECK_FULL_REGS(regs);
if (usp == 0)
usp = regs->gpr[1];/* stack pointer for child */
#ifdef CONFIG_PPC64
if (test_thread_flag(TIF_32BIT)) {
parent_tidp = TRUNC_PTR(parent_tidp);
child_tidp = TRUNC_PTR(child_tidp);
}
#endif
  return do_fork(clone_flags, usp, regs, 0, parent_tidp, child_tidp);
}

参考资料:

http://blog.sina.com.cn/s/blog_6abf2c040101fpcb.html

转载地址:http://ktloi.baihongyu.com/

你可能感兴趣的文章
支付宝变色了!被绑架了你就眨眨眼?官方如此回应...
查看>>
罗永浩欲直播带货,京东说可以帮忙联系
查看>>
B站,正在变成下一个“公众号”?
查看>>
小米启动安心服务月 手机家电产品可免费清洁保养
查看>>
刘作虎:一加新品将全系支持 5G
查看>>
滴滴顺风车上线新功能,特殊时期便捷出行
查看>>
网易云推出“音街”APP 入局免费K歌市场
查看>>
首批马云援欧口罩运抵比利时eWTP枢纽
查看>>
微信小程序上线订单管理功能:实现订单管理、售后维权一体化
查看>>
被哥哥巨额索赔56亿?贾跃亭回应:40多亿为联合担保
查看>>
苹果公布App审查新机制 禁止发布疫情相关娱乐程序和游戏
查看>>
市民举报邻居去韩国代购归来未隔离,真相很尴尬:表面防疫,实则打假?
查看>>
首批国产特斯拉车主,被“割了韭菜”
查看>>
中消协发布疫情期间消费维权热点:口罩类投诉最多
查看>>
猛料一顿狂堆!华为P40 Pro详细参数被曝光
查看>>
台积电:如果不能向华为销售芯片,其他订单可快速取代华为空缺
查看>>
张朝阳直播带货首秀 带的不仅是好物而是价值平台
查看>>
修手机时创意被剽窃,男子向苹果索赔7万亿!是认真的吗?
查看>>
拼多多:不搞套路,要实现同品全网最低价直售
查看>>
京东股价创新高:市值首次突破千亿美元 !
查看>>