进程控制课件讲解-赖炜.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
作业 使用两个进程,完成哥德巴赫猜1亿以内的验证,其中父进程验证6~5000万,子进程验证5000万~1亿。 setsid函数 所需头文件 #include unistd.h 函数原型 pid_t setsid(void) 函数传入值 无 函数返回值 成功:该进程组ID 出错:-1 改变当前目录 使用fork()创建的子进程继承了父进程的当前工作目录。 由于在进程运行过程中,当前目录所在的文件系统(比如“/mnt/usb”等)是不能卸载的,这对以后的使用会造成诸多的麻烦(比如系统由于某种原因要进入单用户模式)。 通常的做法是让“/”作为守护进程的当前工作目录,这样就可以避免上述的问题,当然,如有特殊需要,也可以把当前工作目录换成其他的路径,如/tmp。 改变工作目录的常见函数是chdir()。 清除文件掩码 文件权限掩码是指屏蔽掉文件权限中的对应位。比如,有一个文件权限掩码是050,它就屏蔽了文件组拥有者的可读与可执行权限。 由于使用fork()函数新建的子进程继承了父进程的文件权限掩码,这就给该子进程使用文件带来了诸多的麻烦。因此,把文件权限掩码设置为0,可以大大增强该守护进程的灵活性。 设置文件权限掩码的函数是umask(),通常的使用方法为umask(0)。 关闭文件描述符 同文件权限掩码一样,用fork()函数新建的子进程会从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读或写,但它们一样消耗系统资源,而且可能导致所在的文件系统无法被卸载。 守护进程脱离控制终端后,从终端的I/O不可能再使用,文件描述符为0、1和2的3个文件(常说的输入、输出和报错这3个文件)已经失去了存在的价值,应被关闭。 for(i = 0; i MAXFILE; i++) { close(i); } 进程控制 什么是进程 进程是一个程序的一次执行的过程,同时也是资源分配的最小单元。 程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念。 进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程,是程序执行和资源管理的最小单位。 后台进程 用户在Shell提示符处键入命令,执行一个程序的时候,它将启动一个进程。此后该进程接管终端,Shell中不能再有其它命令,直到进程执行完毕,才终端返回Shell并显示用户提示符。这种进程就是前台进程。 如果用户在输入Shell命令时,在命令串后面加入“”,Shell将不等待进程执行完毕就直接返回,于是就可以同时运行进程和执行Shell操作。这样的进程就是后台进程,后台进程并不接管终端,因此必须是非交互式的。 守护进程 守护进程是与终端无关,常驻后台执行的特殊进程。Linux中最著名的两个守护进程是: sysproc进程。Linux的第一个进程,标识号为0。它能合理地高度系统中运行的进程,负责将进程从硬盘交换区调入内存(换入),或者将进程从内存中调到硬盘交换区(换出)。 init进程。系统初始化进程,标识号为1,是除sysproc外所有进程的祖先。 进程状态 睡眠 调度 唤醒 系统调用 、中断 返回 进程标识 Linux系统中每个进程都有一个唯一的标识号,操作系统采用一个非负整数标识每个进程。 进程启动时,系统为进程分配标识号(进程ID);进程中止后,标识号可以重新使用。但任意时刻,一个标识号只对应一个进程。 函数getpid当前进程ID;函数getppid返回父进程ID 获取进程ID #include stdio.h #include unistd.h #include stdlib.h int main() { /*获得当前进程的进程ID和其父进程ID*/ printf(The PID of this process is %d\n, getpid()); printf(The PPID of this process is %d\n, getppid()); } 启动进程 手工启动,由用户输入命令直接启动进程。 前台启动是手工启动一个进程的最常用方式。一般地,当用户键入一个命令如“ls -l”时,就已经启动了一个进程,并且是一个前台的进程。 若进程非常耗时,且用户也不急着需要结果,可使用后台启动。后台启动是在命令后加“”。 调度启动,系统根据用户的设置自行启动进程。 系统需要进行一些比较费时而且占用资源的维护工作,并且这些工作适合在深夜无人值守的时候进行,这时用户就可以事先进行调度安排,指定任务运行的时间或者场合,到时候系统就会自动完成这一切工作。 使用调度启动进程有几个常用的命令,如at命令在指定时刻执行相关进程,cron命令可以自动周期性地执行相关进程 fork函数 在Linux中创建一个

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档