mxl ChinaUnix博客zhanglin.blog.chinaunix.net
zhanglin496
123
全部博文(442)
内存屏障(5)
RCU机制(3)
netfilter-nat分(3)
skb解析(5)
定时器实现(1)
poll分析(4)
proc系统(5)
linux-IPC(13)
netfilter(84)
linux数据结构(17)
linux驱动(11)
2017年(3)
2016年(15)
2015年(132)
2014年(52)
2013年(101)
2012年(110)
2011年(29)
wjlkoore
Rookie_V
yfydz
simiaoxi
guanglon
zx_wing
tekkaman
8fu8
云中的二
Anzyfly
feijch
zhong202
小小蜗牛
KWA2
zpf0518
moquanli
cynthia
Bsolar
分类: LINUX
2013-09-23 13:06:27
原文地址:进程的创建(-) 作者:chenjifeng
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 *child_tidptr) { struct task_struct *p; int trace = 0; struct pid *pid = alloc_pid();//解释1 long nr; if (!pid) return -EAGAIN; nr = pid->nr; if (unlikely(current->ptrace)) {//解释2 trace = fork_traceflag (clone_flags); if (trace) clone_flags |= CLONE_PTRACE; } p = copy_process(clone_flags, stack_start, regs, stack_size, parent_tidptr, child_tidptr, pid);//解释3 if (!IS_ERR(p)) { struct completion vfork; if (clone_flags & CLONE_VFORK) { p->vfork_done = &vfork; init_completion(&vfork); } if ((p->ptrace & PT_PTRACED) || (clone_flags & CLONE_STOPPED)) {//解释4 sigaddset(&p->pending.signal, SIGSTOP); set_tsk_thread_flag(p, TIF_SIGPENDING); } if (!(clone_flags & CLONE_STOPPED)) wake_up_new_task(p, clone_flags);//解释5 else p->state = TASK_STOPPED;//解释6 if (unlikely (trace)) {//解释7 current->ptrace_message = nr; ptrace_notify ((trace << 8) | SIGTRAP); } if (clone_flags & CLONE_VFORK) {//解释8 freezer_do_not_count(); wait_for_completion(&vfork); freezer_count(); if (unlikely (current->ptrace & PT_TRACE_VFORK_DONE)) { current->ptrace_message = nr; ptrace_notify ((PTRACE_EVENT_VFORK_DONE << 8) | SIGTRAP); } } } else { free_pid(pid); nr = PTR_ERR(p); } return nr;//解释9 }
上一篇:Trie树
下一篇:进程的组织
登录 注册