linux应用开发 之 进程编程基础

linux应用开发 之 进程编程基础

ID:33758385

大小:809.55 KB

页数:25页

时间:2019-02-28

linux应用开发 之 进程编程基础_第1页
linux应用开发 之 进程编程基础_第2页
linux应用开发 之 进程编程基础_第3页
linux应用开发 之 进程编程基础_第4页
linux应用开发 之 进程编程基础_第5页
资源描述:

《linux应用开发 之 进程编程基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、LinuxLinux应用开发–应用开发–进程编程基础进程编程基础中标中标LinuxLinux系列讲座系列讲座中标软件有限公司2011/09Linux开发–进程编程基础进程编程基础进程介绍进程创建进程执行进程等待进程退出进程编程基础–进程介绍进程属性进程是一个程序的一次执行过程,它是操作系统的基本调度单位。一个进程由以下组成:进程上下文,表示进程执行的状态;程序当前的执行目录;程序服务的文件和目录;程序的访问权限;内存和其他分配给进程的系统资源;Linux下每个进程用唯一的进程号(PID)来标识

2、。进程最主要的属性就是进程号和父进程号。Linux系统内所有进程为树形结构关系。PID为1的init进程是根节点。使用pstree命令,查看系统内正在执行的各个进程间的继承关系。Linux系统包括3种类型的进程:交互进程:由shell启动,可在前台或后台运行。批处理进程:与终端没有联系,是一个进程序列。监控进程:又称守护进程,在后台运行。进程编程基础–进程介绍进程状态进程模型中存在如下各种状态:用户状态:在用户态环境下运行;内核状态:在内核态环境下运行;内存中就绪:没有执行,但处于就绪状态

3、。只要内核调度,就可执行;内存中睡眠:正在睡眠且存储在内存中,没有被交换到SWAP设备中;就绪且换出:处于就绪状态,但需要换入内存,内核才能再次调度它;睡眠且换出:正在睡眠,且被换出内存;被抢先:从内核态返回用户态时,内核抢先调度了另外一个进程;创建状态:刚被创建时,是最初的状态;僵死状态:调用exit结束,进程不再存在,但进程表项中有记录;进程编程基础–进程介绍进程结构Linux系统中,一个进程在内存里由3部分数据组成:代码段:存放程序代码的数据;多个进程运行同一个程序,共用一个代码段;数据

4、段:存放程序的全局变量、常量及动态数据分配的数据空间;堆栈段:存放的是子程序的参数、返回地址及局部变量;系统在收到中断、执行系统调用或内核做上下文切换时,会保存进程上下文,其包括:该进程用户空间内容、寄存器内容及相关的内核数据结构。内核在以下几种情况下允许发生上下文切换:进程自身进入睡眠时;进程执行完系统调用要返回用户态,但发现该进程不是最具资格运行的进程时;内核完成中断处理后要返回用户态,但发现该进程不是最有资格运行的进程时;进程退出时;进程编程基础–进程介绍进程控制在Linux系统中,使用系

5、统调用fork来创建进程。内核为完成fork调用会进行如下操作:在进程表中为新进程分配表项;给子进程分配唯一的进程标识号,也就是进程表中的索引号;复制父进程的进程表项给子进程;具有与父进程一样的uid、euid、gid等;把与父进程相连的文件表和索引节点表的引用数加1;内核为子进程创建用户级上下文;生成进程的动态部分,内核复制父进程的上下文的寄存器上下文和内核栈,调用对父进程返回子进程的进程标识号,对子进程返回0;Linux系统调用exit用来终止进程执行。内核会释放进程所占资源和内存空间,保留

6、进程表项,并设置为僵死状态。Linux系统调用wait用来和子进程同步。如果没有子进程则返回错误;如果子进程僵死则返回进程标识号及退出时给父进程的参数;如果子进程没有僵死,调用进程就阻塞了,等待子进程僵死或其他信号。Linux系统调用exec用来实现对其他程序的调用。Linux开发–进程编程基础进程编程基础进程介绍进程创建进程执行进程等待进程退出进程编程基础–进程创建调用函数创建进程的系统调用有:fork():创建的子进程复制父进程的资源,包括内存资源;vfork():创建的不是真正意义的进程,而是

7、线程,其共享内存资源。由vfork创造出来的子进程还会导致父进程挂起,除非子进程exit或者execve才会唤起父进程;clone():功能强大,支持很多参数,可类似fork或vfork,甚至可以创建兄弟进程。Linux系统中,系统调用fork()、vfork()和clone()都是通过调用内核函数来实现的。对应的内核函数分别是sys_fork()、sys_vfork()和sys_clone()。内核中通过调用do_fork()函数实现。do_fork()调用copy_process()函数实现进程复制c

8、opy_process()复制父进程的数据段和堆栈段,同时为子进程生成一个PID。进程编程基础–进程创建调用函数(续)fork()将程序分成两段。父进程执行整个程序,子进程只执行fork()调用之后的部分。fork()调用一次,返回值两次,分别在父进程和子进程。返回值>0:代码执行在父进程中,返回值代表子进程的PID=0:代码执行在子进程中<0:函数调用发生

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。