14-5张震

博客园 首页 联系 订阅 管理

fork()函数:

用于从已存在的进程中创建一个新的进程。新进程称为子进程,而原来的进程成为父进程。使用fork()函数得到的子进程是父进程的一个复制品。它从父进程处继承整个进程的地址空

间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只

有它的进程号,资源使用和计数器等。

注意:fork()函数使用一次就创建一个进程,所以若把fork()函数放在了if else判断语句中则要小心,不能多次使用fork()函数。

exec()函数:

提供一个在进程中启动另一个程序的执行方法。它可以根据指定的文件名或目录名找到可执行的文件,并用它来取代原调用进程的数据段、代码和堆栈段,在执行完后,原调用进程内的

内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件。


注意:在使用exec函数族时,一定要加上错误判断语句。exec很容易执行失败,最常见原因有:

(1)找不到文件或路径,此时errno被设置为EFAULT;

(2)数组argv和envp忘记用NULL结束,此时errno被设置成EFAULT;

(3)没有对应的执行文件的权限,此时errno被设置为EACCES。

exit()和_exit()函数:

都是用来终止进程的。当程序执行到exit()或_exit时,进程会无条件地停止剩下的所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。

wait()和waitpid()函数:

wait()函数:用于使父进程阻塞,直到一个子进程结束或者该进程接到一个指定的信号为止。如果该父进程没有子进程或者他的子进程已经结束,则wait()就会立即返回。

waitpid()函数:它和wait()作用一样,但它并不一定要等待第一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的wait()功能,也能支持作业控制。


posted on 2017-05-21 20:34  Zの²  阅读(131)  评论(0编辑  收藏  举报