一 exec函数:
(1)作用:
*exec并不创建进程,只是用一个全新的程序替换当前进程的正文、数据、堆和栈段,exec前后进程的ID并未改变。
*exec的新程序可以是:带有main函数的程序、linux命令或自己写的脚本文件等可执行文件。
*execve是系统调用,其余五个是库函数,它们都要调用execve。
(2)种类(6个exec函数):
*基本的进程控制原语:用fork创建新进程、用exec执行执行新程序、exit和wait(或waitpid)用来处理终止和等待终止。
exec函数如下图,注意这些函数的区别。
6个函数区别:
*第一个参数,前四个取路径名为参数,后两个取文件名为参数。
*参数表的传递不同。
*向新程序传递环境变量表不同。
(3)新程序进程与原进程:
二 竞争条件:
(1)竞争条件:当多个进程都企图对共享数据进行某种处理,而最后结果又取决于进程运行的顺序。
*如果一个进程等待一个子进程终止,它必须调用wait函数。
*如果一个进程要等待父进程终止,则可使用下面循环:
while(getppid()!=1)
sleep(1);
这种循环称为轮询,浪费了CPU时间。
(2)为了避免竞争条件和轮询,在多个进程之间需要某种形式的交互。
如:信号、进程间通信(IPC)。
三 与进程相关的用户ID(待补充)
(1)特权是基于用户和组ID的:当程序需要增加特权,或需访问当前不允许访问的资源时,需要更换自己的用户ID或组ID,使得新ID具有合适的特权和访问权限。
(2)与进程有关的用户ID:
(3)更改用户ID和组ID: