Chinaunix首页 | 论坛 | 博客
  • 博客访问: 416975
  • 博文数量: 71
  • 博客积分: 1525
  • 博客等级: 上尉
  • 技术积分: 605
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-05 17:28
文章分类

全部博文(71)

文章存档

2012年(21)

2011年(50)

分类: LINUX

2012-10-28 22:47:56

当用户态调用fork系统函数时,会调用sys_fork,在sys_fork函数内会调用
return do_fork(SIGCHLD, regs.esp, ®s, 0, NULL, NULL);
其中SIGCHLD表示当创建的子进程退出时,会发送SIGCHLD信号到父进程,如果父进程有调用wait函数就会回收分配给子进程的资源。
do_fork要做以下的内容:
1. 调用函数alloc_pidmap分配pid号,从最后last这个全局变量+1作为这次的pid号。 
2. 判断current->ptrace,这里的语句是if (unlikely(current->ptrace))是否正陷入系统调用,这个标识会被改写。
3. copy_process创建了新任务,新的进程控制块,和thread_info这两个结构体并且进行初始化,但是却不会真正的开始运行这个新进程。返回任务控制块。
4. 如果任务控制块合法,则进入if (!IS_ERR(p))分支。但是里面的task_struct结构内的ptrace是什么含义不懂?
4.1 wake_up_new_task,把要调度的新进程放到队列中,准备被调用。

在上面的内容中不懂的有:
task_struct结构内的ptrace是什么概念?
阅读(2341) | 评论(0) | 转发(0) |
0

上一篇:ubuntu下安装source insight

下一篇:没有了

给主人留下些什么吧!~~