站长软件下载 东莞佳利热转印机 空白卫衣批发 个性服饰定制

fork的系统调用在内核中做的事情

当用户态调用fork系统函数时,会调用sys_fork,在sys_fork函数内会调用

return do_fork(SIGCHLD, regs.esp, &regs, 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是什么概念?
posted on 2012-10-29 10:37  pc蛋蛋  阅读(187)  评论(0编辑  收藏  举报