- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2Linux进程控制编程.ppt
2 Linux进程控制编程 主要内容 1 linux中获取进程的ID 2 进程创建 3 终止进程 4 进程等待 5 exec函数族 linux中获取进程的ID 在linux中所有的进程标识信息都记录在 task_struct中,而进程在运行过程中都会拥有一个唯一的ID号,这些信息可以通过linux内核提供的相应的函数取得。相关的函数原型定义如下: #include sys/types.h #include unistd.h uid_t getpid(void) //获取进程ID uid_t getppid(void) //获取父进程ID pid_t getpgrp(void) //获取进程组ID pid_t getpgid(void) //获取指定pid进程所属组的ID uid_t getuid(void) //获取进程的所有者ID uid_t geteuid(void) //获取进程的有效用户ID git_t getegid(void) //获取进程的有效组 ID 实例:获取进程ID 以下代码演示的是获得本程序运行的进程的ID信息,这是一种获得进程ID信息的方法。 #include stdio.h #include sys/types.h int main(int argc, char **argv) { long my_pid,parent_pid; long my_uid,my_euid; long my_gid,my_egid;//变量定义 my_pid=getpid(); parent_pid=getppid(); my_uid=getuid(); my_euid=getuid(); my_gid=getgid(); my_egid=getegid();//函数调用 实例:获取进程ID printf(Process ID:%ld\n,my_pid); printf(Parent ID:%ld\n,parent_pid); printf(User ID:%ld\n,my_uid); printf(Effective User ID:%ld\n,my_euid); printf(Group ID:%ld\n,my_gid); printf(“Effetive Group ID:%ld\n”,my_egid);//执行输出 } 运行结果如图所示: root@ubuntu:/home/cSources# ./getpidtest Process ID:1880 Parent ID:1487 User ID:0 Effective User ID:0 Group ID:0 Effetive Group ID:0 进程创建 在Linux中创建一个新进程的方法是使用fork()函数。 fork()函数用于从已存在的进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。 进程创建 因为子进程几乎是父进程的完全复制,所以父子两个进程会运行同一个程序。因此需要用一种方式来区分它们,并使它们照此运行,否则,这两个进程不可能做不同的事。 同时可以看出,使用fork()函数的代价是很大的,它复制了父进程中的代码段、数据段和堆栈段里的大部分内容,使得fork()函数的系统开销比较大,而且执行速度也不是很快。 进程创建 实际上是在父进程中执行fork()函数时,父进程会复制出一个子进程,而且父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行。从而两个进程分别获得其所属fork()的返回值,其中在父进程中的返回值是子进程的进程号,而在子进程中返回0。因此,可以通过返回值来判定该进程是父进程还是子进程。 进程创建 vfork()与fork()表现形式相同,调用1次,返回2次,但实质有区别: vfork()创建新进程但不复制父进程,而是执行exec ()函数,执行一套新代码。可以保证先执行子进程。 进程创建实例见教材P71。 终止进程 exit()和_exit()函数都是用来终止进程的。 _exit()函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构; exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序。
您可能关注的文档
最近下载
- 基层儿科医务人员服务能力提升学习班答案-2024华医网继续教育答案.docx VIP
- 中学生素质发展评价手册42p.pdf VIP
- 《反对党八股》名师教学课件 (1).pptx VIP
- 薛法根:《风娃娃》(二年级).docx
- 40篇英语短文搞定高考3500个单词(全部含翻译-重点解析).doc
- SY∕T 4113.7-2020 管道防腐层性能试验方法 第7部分:厚度测试.pdf
- 阿里全球数学竞赛姜萍成绩造假PPT课件.pptx VIP
- FM知识考试试题-必做经典大题.pdf
- 旅游管理职业生涯规划.pdf
- 江苏省南京市2025届高三零模作文“点外卖”与“送外卖”导写(真题呈现+审题立意+素材积累+写作示例+考场范文).docx VIP
文档评论(0)