一:竞争条件
当多个进程都企图对共享数据进行处理,而最后的结果又取决于进程运行的顺序时,我们认为发生了竞争条件。父进程等待子进程返回可以使用wait函数,子进程等待父进程返回可以使用轮询的方式,每隔1s都去询问一次。但是这样浪费CPU时间,所以多个进程之间需要有某种形式的信号发送和接受的方式来进行处理多个进程间通信的问题。在第十节将会说明这个问题。
二:函数exec
fork函数创建新的子进程之后,子进程往往会调用exec函数,调用这个函数代表执行的程序完全替换为新程序,新程序从main函数开始执行,但是进程的id是没有改变的,exec只是用一个新程序替换了当前进程的正文段,数据段,堆段和栈段。
有七种不同的exec函数可供使用,见下图:
这七个函数的区别为前四个取路径名作为参数,后两个取文件名作为参数,最后一个取文件描述符作为参数。
三:函数sysytem
system函数对系统的依赖性很强,函数原型为:
system函数有三种返回值
1.fork失败或者waitpid返回除EINTR之外的出错,则system返回-1,并且设置errno以指示错误类型。
2.如果exec失败,则返回值如同shell执行了exit。
3.否则所有3个函数都成功,那么system的返回值时shell的终止状态。
四:用户标识
任意进程都可以得到其实际用户ID和有效用户ID和组ID。但是,我们有时候希望找到运行该程序的用户的登录名。我们可以调用getpwuid,但是如果一个用户有多个登录名,这些登录名又对应着同一个用户ID,又将如何呢?系统通常记录用户登录时使用的名字,用getlogin函数可以获取此登录名。该函数声明如下:
如果调用此函数的进程没有连接到用户登录时所用的终端,则函数会失败,通常会成为这些进程为守护进程。
五:进程调度
UNIX系统的调度策略和调度优先级是由内核决定的,对进程提供的只是基于调度优先级粗粒度的控制。进程可以通过调整nice值选择优先级,nice值的范围在0-2*NZERO-1之间,这个NZERO值室友系统决定的。
六:进程时间
进程的时间有三种,在之前已经提到过,分别是时钟时间,用户CPU时间,系统CPU时间。任意进程都可以调用times函数获得他自己以及已经终止子进程的上述值。
此函数填写由buf指向的tms结构,该结构定义如下:
APUE读书笔记(12) 进程控制(下)
最新推荐文章于 2025-03-27 15:33:54 发布