linux中内核源码do_fork()的分析

一般进程的创建分为两步:fork() + exec()
    fork()通过拷贝当前进程创建一个子进程。子进程与父进程的区别仅仅在于PID、PPID和某些资源和统计量。
    exec()函数负责读取可执行文件并将其载入地址空间开始运行。

fork(),vfork(),__clone()根据各自需要的参数标志去调用clone()。然后由clone()去调用do_fork()

    当我们要fork()、vfork(),__clone()时,我们要用一个struct pt_regs regs结构保存断点时的信息(即当用户态转到内核态时产生中断),这个结构里放着一系列的寄存器。比如:用 ebx 寄存器保存可执行文件路径的指针,用 ecx 寄存器保存命令行参数的指针,用 edx 寄存器保存环境变量的指针,等等。然后clone()去调用do_fork()struct pt_regs regs结构如下:

struct pt_regs {
	long ebx;
	long ecx;
	long edx;
	long esi;
	long edi;
	long ebp;
	long eax;
	int  xds;
	int  xes;
	long orig_eax;
	long eip;
	int  xcs;
	long eflags;
	long esp;
	int  xss;
};

    然后clone()去调用do_fork()

do_fork()函数的定义如下:

long do_fork(unsigned long clone_flags,
	        unsigned long stack_start,
	        struct pt_regs *regs,
	        unsigned long stack_size,
	        int __user *parent_tidptr,
	        int __user *ch
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值